我正在尝试使用枕头将EPS图像转换为JPEG。但是结果的质量很低。我尝试使用resize
方法,但它被完全忽略了。我将JPEG图像的大小设置为(3600, 4700)
,但得到的图像具有(360, 470)
大小。我的代码是:
eps_image = Image.open('img.eps')
height = eps_image.height * 10
width = eps_image.width * 10
new_size = (height, width)
print(new_size) # prints (3600, 4700)
eps_image.resize(new_size, Image.ANTIALIAS)
eps_image.save(
'img.jpeg',
format='JPEG'
dpi=(9000, 9000),
quality=95)
Vasu Deo.S注意到了我的一个错误,多亏了他,图像变得更大了,但质量仍然很低。我尝试了不同的DPI,大小,重采样值的resize
函数,但结果没有太大的变化。我怎么才能让它变得更好呢?
发布于 2019-06-13 02:29:12
问题是PIL是光栅图像处理器,而不是矢量图像处理器。它在打开矢量图像(如EPS文件和SVG文件)时将其“栅格化”到网格上,因为它只能处理光栅。
如果该网格没有足够的分辨率,您将永远无法重新获得它。通常,它以100dpi的速度栅格化,所以如果你想制作更大的图像,你甚至需要在开始之前栅格化到更大的网格上。
比较:
from PIL import Image
eps_image = Image.open('image.eps')
eps_image.save('a.jpg')
结果是540x720:
还有这个:
from PIL import Image
eps_image = Image.open('image.eps')
# Rasterise onto 4x higher resolution grid
eps_image.load(scale=4)
eps_image.save('a.jpg')
结果是2160x2880:
您现在有足够的质量来随心所欲地调整大小。
请注意,您根本不需要编写任何Python来完成这项工作- ImageMagick将为您完成所有这些工作。它包含在大多数Linux发行版中,可用于macOS和Windows,您只需在终端中使用它即可。等效的命令如下所示:
magick -density 400 input.eps -resize 800x600 -quality 95 output.jpg
发布于 2019-06-12 16:37:41
这是因为eps_image.resize(new_size, Image.ANTIALIAS)
返回了一个调整大小的图像副本。因此,您必须将其存储在一个单独的变量中。只需更改:-
eps_image.resize(new_size, Image.ANTIALIAS)
至
eps_image = eps_image.resize(new_size, Image.ANTIALIAS)
更新:-
这些可能不能完全解决问题,但仍然会有所帮助。
.jpeg
,这是一种有损压缩格式,因此在压缩/转换过程中会丢失信息(大部分情况下)。将输出文件扩展名更改为无损压缩格式,如.png
,这样数据就不会在压缩过程中受到影响。此外,在Image.save()
quality=95
更改为quality=100
使用Image.ANTIALIAS
对图像进行重采样,这在放大图像时并不是很好(在较新的版本中它已被Image.LANCZOS
取代,为了向后兼容,该子句仍然存在)。尝试使用Image.BICUBIC
,它在放大图像时会产生非常好的结果(在大多数情况下)。https://stackoverflow.com/questions/56543825
复制相似问题