2

I wrote a simple implementation of PIL to convert a list of EPS files to PNG.

import Image
for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f+".png"
    try:
        im = Image.open(infile)
        im.save(outfile, dpi = (1000, 1000))
    except IOError:
        print "Error"

Although the dpi flag changes the PNG's file resolution, it doesn't increase the resolution of the im object. This means my output PNG image has very low quality. Is there a way to increase the resolution of the im object? This code doesn't work.

im = Image.open(infile, dpi = (1000, 1000))

Ideas?

4

2 に答える 2

3

/usr/lib64/python2.7/site-packages/PIL/EpsImagePlugin.pyを見ると、これはghostscriptを呼び出すことで実装されています。

# Build ghostscript command
command = ["gs",
           "-q",                    # quite mode
           "-g%dx%d" % size,        # set output geometry (pixels)
           "-dNOPAUSE -dSAFER",     # don't pause between pages, safe mode
           "-sDEVICE=ppmraw",       # ppm driver
           "-sOutputFile=%s" % file,# output file
           "- >/dev/null 2>/dev/null"]

サイズオプションは、図形のサイズを変更するだけで、再スケーリングはしません。たぶん、PIL開発者へのバグレポートがここで役立つでしょう。

回避策として、またImageMagickコマンドラインツールがインストールされている場合は、これを回避策として使用できます。

import os
cmd = 'convert test.ps test.png'
os.system(cmd)

これは、品質を損なうことなく、私のシステムで正常に機能します。

このバージョンでは、取得する解像度をもう少し制御できます。

import os
cmd = "convert -density 300 test.ps test.png"
os.system(cmd)
于 2012-11-21T16:15:59.073 に答える
1

もう 1 つの回避策は、ps/eps でジオメトリまたはテキストを非常に大きくすることです。私のアプリケーションでは、ラテックスを EPS でレンダリングし、PNG に変換しています。フォント サイズをより大きな数値 (200 pt) に設定するだけで、PNG の品質は完璧です。EPS コンテンツを生成している場合は、これでうまくいきます。

于 2014-09-29T18:06:50.503 に答える