我正在尝试使用Pillow将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)
UPD。 Vasu Deo.S注意到了我的一个错误,由于他,JPG图像变大了,但是质量仍然很低。我尝试了resize
函数的不同DPI,大小,重采样值,但是结果并没有太大变化。我该如何做得更好?
答案 0 :(得分:2)
问题在于PIL是光栅图像处理器,而不是 vector 图像处理器。打开矢量图像时,会将矢量图像(例如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
答案 1 :(得分:1)
这是因为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
,以便
压缩期间不会破坏数据。也改变
quality=95
中的quality=100
至Image.save()
Image.ANTIALIAS
重采样图像,即
放大图像时效果不佳(已被替换为
Image.LANCZOS
在较新的版本中,该子句仍然存在
向后兼容)。尝试使用Image.BICUBIC
,它会产生
放大图像时,效果(大部分情况下)非常好。