6

200 dpi の JPEG ファイルを 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 が低いように見える画像が大きくなります。PIL を使用して JPEG から PDF に変換するときに一貫した解像度を維持する方法はありますか? または、これを行うためのより良い方法はありますか?

これは、ファイルのディレクトリを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)
4

7 に答える 7

11

ソースのCHANGESファイルでは、PIL 1.1.7以下を読むことができます:

  • PDF ファイルの解像度保存オプションを追加しました。

    Andreas Kostyrka の書き込み: 「解像度」保存オプション
    をサポートする、Ubuntu に含まれている 1.1.6 に基づくパッチを適用した PdfImagePlugin.pyを含めました。 素晴らしいとは言えませんが、正確に 72dpi ではない PDF を許可すること
    で、PDF の保存がより便利になります。

したがって、次のことができるはずです。

im.save(outfile, "PDF", resolution=100.0)

(私のUbuntuボックスではうまくいくようです)。

于 2012-09-27T18:23:57.610 に答える
6

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])
于 2012-09-27T18:03:00.660 に答える
2

PIL パラメータは小文字にすることが重要です。

im.save(出力ファイル, "PDF", 品質 = 100)

品質 = 100 ----機能しません。

于 2015-05-12T15:23:57.990 に答える
1

これは、拡張子が .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
于 2017-05-16T08:05:39.430 に答える
0

以下を使用する必要がある場合があります。

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をインストールしました。何らかの理由で PIL.Image.Image に切り替えました

于 2014-10-17T15:44:02.613 に答える
-1

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)
于 2016-10-14T16:36:24.697 に答える