Python 圖片格式轉(zhuǎn)換

圖片格式轉(zhuǎn)換可以利用各種軟件

今天介紹一下如何使用 Python 實(shí)現(xiàn)各種圖片格式的轉(zhuǎn)換

1. SVG 轉(zhuǎn)其他格式

讀取 SVG 格式文件,需要安裝 svglib 庫(kù)

pip install svglib

SVG 圖片保存為其他格式圖片需要用到 reportlab 庫(kù)

pip install reportlab

1.1 讀取 SVG 圖片

from svglib.svglib import svg2rlg

drawing = svg2rlg("circos.svg")

1.2 SVG 轉(zhuǎn) PNG

from reportlab.graphics import renderPM
from svglib.svglib import svg2rlg

drawing = svg2rlg("circos.svg")
renderPM.drawToFile(drawing, "circos.png", fmt="PNG")

1.3 SVG 轉(zhuǎn) PDF

from reportlab.graphics import renderPDF
from svglib.svglib import svg2rlg

drawing = svg2rlg("circos.svg")
renderPDF.drawToFile(drawing, "circos.pdf")

1.4 SVG 轉(zhuǎn)其他格式

renderPM.drawToFile(
    d,
    fn,
    fmt='GIF',
    dpi=72,
    bg=16777215,
    configPIL=None,
    showBoundary=<reportlab.rl_config._unset_ object at 0x106458070>,
)
可以通過(guò)設(shè)置 fmt 來(lái)選擇輸出格式,
fmt 支持:
'GIF', 'TIFF','TIFFP','TIFFL','TIF','TIFF1' 'PNG','BMP', 'PPM', 'JPG','JPEG'

2. PNG 轉(zhuǎn)其他格式

讀取 PNG 圖片 使用到了 Pillow 庫(kù)

pip install Pillow

2.1 PNG 轉(zhuǎn) JPG

from PIL import Image

img = Image.open('circos.png')
img.save(r'pil_circos.jpg')

2.2 PNG 轉(zhuǎn) SVG

def toSVG(infile, outfile):
    image = Image.open(infile).convert('RGBA')
    data = image.load()
    width, height = image.size
    out = open(outfile, "w")
    out.write('<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n')
    out.write('<svg id="svg2" xmlns="http://www.w3.org/2000/svg" version="1.1" \
                width="%(x)i" height="%(y)i" viewBox="0 0 %(x)i %(y)i">\n' % \
              {'x': width, 'y': height})
    
    for y in range(height):
        for x in range(width):
            rgba = data[x, y]
            rgb = '#%02x%02x%02x' % rgba[:3]
            if rgba[3] > 0:
                out.write('<rect width="1" height="1" x="%i" y="%i" fill="%s" \
                    fill-opacity="%.2f" />\n' % (x, y, rgb, rgba[3]/255.0))
    out.write('</svg>\n')
    out.close()
    
toSVG('heart.jpeg', 'heart.svg')

2.3 PNG 轉(zhuǎn) PDF

from PIL import Image

img = Image.open('circos.png')
img.convert('RGB')
img.save('pil_circos.pdf')

2.4 多個(gè) PNG 合并為 PDF

path = 'png file path'
img_list = [Image.open(os.path.join(path, f)).convert('RGB') for f in os.listdir(path) 
         if f.lower().endswith('png')]
img = img_list.pop(0)
img.save('pil_circos.pdf', resolution=10.0, save_all=True, append_images=img_list)

這種方法會(huì)損失分辨率

3. JPG

JPG 或者說(shuō) JPEG 的轉(zhuǎn)換與 PNG 格式相同,上面的代碼可以復(fù)用。

4. 合并多個(gè) PDF 文件

使用到 PyPDF2 庫(kù)

pip install PyPDF2

使用

from PyPDF2 import PdfFileMerger
import os

path = 'path of pdf file'
pdf_list = [f for f in os.listdir(path) if f.lower().endswith('pdf')]

pdf_merge = PdfFileMerger()
for f in pdf_list:
    pdf_merge.append(f)

pdf_merge.write('merge_pdf.pdf')

可以將每張圖片先轉(zhuǎn)換為單個(gè) PDF 文件,然后合并 PDF 文件,避免分辨率損失。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容