Преобразование библиотеки изображений из JPEG в
Я пытаюсь преобразовать файл JPEG с 200 dpi в PDF-файл, однако, когда я сохраняю файл в формате PDF, я думаю, что он меняет dpi на 72 и, таким образом, делает изображение больше. У меня была аналогичная проблема при первоначальной попытке масштабировать изображение JPEG до меньшего размера, и я смог решить эту проблему, указав dpi при сохранении изображения.
im = Image.open("Image.jpg")
dpi=im.info['dpi']
if im.size == (2592, 1728):
out = im.resize((1188,792), Image.ANTIALIAS)
elif im.size == (1728,2592):
out = im.resize((792,1188), Image.ANTIALIAS)
out.save(project, dpi=dpi)
теперь, когда я пытаюсь сохранить этот JPEG как PDF, указание dpi, похоже, не имеет никакого значения, и я получаю изображение это больше, чем мой оригинал, который выглядит так, как будто он имеет более низкий dpi. Есть ли способ сохранить согласованное разрешение при преобразовании из JPEG в PDF с помощью PIL? Или для меня есть лучший способ сделать это?
это то, что у меня есть для преобразования каталога файлов из JPEG в PDF:
for infile in listing:
outfile = destpath + os.path.splitext(infile)[0] + ".pdf"
current = path + infile
if infile != outfile:
im = Image.open(current)
dpi=im.info['dpi']
im.save(outfile, "PDF", Quality = 100)
7 ответов
в файле изменений PIL 1.1.7
источники можно прочесть:
добавлена опция сохранения разрешения для PDF-файлов.
Андреас Костырка пишет: Я включил латаный PdfImagePlugin.py
на основе 1.1.6, включенного в Ubuntu, который поддерживает "разрешение"
сохранить вариант. Не здорово, но это делает сохранение PDF более полезным
разрешение PDF-файлов, которые не являются точно 72dpi.
Так что вы должны быть в состоянии сделать:
im.save(outfile, "PDF", resolution=100.0)
(Кажется, отлично работает на моем Ubuntu box).
можно использовать reportlab библиотека.
import sys
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, flowables
__jpgname = str()
def drawPageFrame(canvas, doc):
width, height = letter
canvas.saveState()
canvas.drawImage(
__jpgname, 0, 0, height, width,
preserveAspectRatio=True, anchor='c')
canvas.restoreState()
def jpg2pdf(pdfname):
width, height = letter
# To make it landscape, pagesize is reversed
# You can modify the code to add PDF metadata if you want
doc = SimpleDocTemplate(pdfname, pagesize=(height, width))
elem = []
elem.append(flowables.Macro('canvas.saveState()'))
elem.append(flowables.Macro('canvas.restoreState()'))
doc.build(elem, onFirstPage=drawPageFrame)
if __name__ == '__main__':
if len(sys.argv) < 3:
print("Usage: python jpg2pdf.py <jpgname> <pdfname>")
exit(1)
__jpgname = sys.argv[1]
jpg2pdf(sys.argv[2])
важно, чтобы параметры PIL были строчными.
im.сохранить (outfile, "PDF", quality = 100)
качество = 100 ----не получится.
вот код, который преобразует любой файл .формат JPG или. Расширение JPG и конвертировать в PDF, а затем удалить изображения, которые были преобразованы. Извините, комментарии на французском языке.
import os #necessaire pouvoir supprimer l'image une fois converti et parcourir les fichers dans le dossier
from fpdf import FPDF #necessaire pour convertir les jpg en pdf
for file in os.listdir(): # pour chaque fichiers dans le dossier dans lequel se trouve ce fichier python
if file.endswith(".jpg") or file.endswith(".JPG"): #permet de selectionner les fichers avec l'extension .jpg ou .JPG
img=os.path.join(file) #convertie le nom du fichier en variable
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.image('%s'%img, 3,3,204 ) # les chiffres permettent de positionner l'image sur le pdf : 3mm de la gauche, 3mm du haut, et 204 mm de la gauche pour la fin de l'image
img2=img[:-4] #supprime les 4 dernières lettres du nom du ficher, à savoir '.jpg' ou '.JPG'
pdf.output('%s.pdf'%img2,'F') #convertie en pdf
os.remove('%s'%img) #supprime les fichier jpg ou JPG
вам потребуется:
import PIL
import PIL.Image
filename = 'filename'
im = PIL.Image.open(filename)
newfilename = 'path.pdf'
PIL.Image.Image.save(newfilename,outfile, "PDF", resoultion = 100.0)
Я использую windows, и я использовал pip для установки PIL. По какой-то причине он переключился на пила.Изображение.Изображение
правильное использование save:
PIL.Image.Image.save(im, newfilename, "PDF", resolution = 100.0)
пример:
path='v:/dev/python/mooc/'
filename = path + '2016_a_milano_001.JPG'
im = PIL.Image.open(filename)
newfilename = path+ 'r.pdf'
PIL.Image.Image.save(im, newfilename, "PDF", resoultion=100.0)
полный пример здесь:
import os
import PIL.Image
def img2pdf(fname):
filename = fname
name = filename.split('.')[0]
im = PIL.Image.open(filename)
if not os.path.exists('im2pdf_output'):
os.makedirs('im2pdf_output')
newfilename = ''.join(['im2pdf_output/',name,'.pdf'])
PIL.Image.Image.save(im, newfilename, "PDF", resolution = 100.0)
print("processed successfully: {}".format(newfilename))
files = [f for f in os.listdir('./') if f.endswith('.jpg')]
for fname in files:
img2pdf(fname)