PIL转换图片效果差
我用单反相机拍了一张照片,然后用 Photoshop 处理了一下,接着想用 PIL 来调整照片的大小。这是我用的主要代码:
image = Image.open(img_obj, 'r')
for pic_size_name, pic_size_val in pic_sizes.items():
width, height = [int(item) for item in pic_size_val.split('x')]
img_width, img_height = image.size
pic_save_path = os.path.join(
save_path,
hash_val + '_' + pic_size_name + '.jpg'
)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGBA')
if width > img_width and height > img_height:
image.save(pic_save_path, "jpeg", quality=90)
continue
img = image.copy()
if pic_size_name == 's' or pic_size_name == 'xs':
dest_ratio = float(width) / height
current_ratio = float(img_width) / img_height
if dest_ratio > current_ratio:
offset = int((img_height - img_width / dest_ratio) / 2)
box = (0, offset, img_width, img_height - offset)
else:
offset = int((img_width - img_height * dest_ratio) / 2)
box = (offset, 0, img_width - offset, img_height)
img = img.crop(box)
img = img.resize((width, height), Image.ANTIALIAS)
img.save(pic_save_path, "jpeg", quality=90)
elif pic_size_name == 'm':
new_height = img_height * width / img_width
img = img.resize((width, new_height), Image.ANTIALIAS)
img.save(pic_save_path, "jpeg", quality=90)
else:
img.thumbnail((width, height), Image.ANTIALIAS)
img.save(pic_save_path, "jpeg")
但是调整后的效果不是很好。
这是用 PIL 转换后的效果:
这是用 Flickr 转换后的效果,应该是这样的:
http://www.flickr.com/photos/lzyy/6524414285/sizes/z/in/photostream/
我是不是用错了 PIL,还是说有什么我不知道的小技巧?
1 个回答
2
在下载并查看GIMP中的两张图片时,我发现它们的区别在于,Flickr上的那张图片有一个嵌入的颜色配置文件,而用PIL生成的那张没有。因为我没有注意到对比度或清晰度的差异,所以我猜想你可能是对颜色差异感到困扰。
你需要在使用PIL处理图片时,保留与图片相关的任何颜色配置文件。快速搜索一下,你会找到pyCMS,它的首页上有4到5行的示例代码。很可能pyCMS就是你需要的工具: