圖片格式轉(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 文件,避免分辨率損失。