Python简单图像处理
我想做的事情:
我想让用户能够上传任意大小的图片。如果这张图片的宽度超过1024像素或者高度超过768像素,就需要对它进行缩放。缩放后,图片会被调整到这两个限制之内,同时保持原有的比例。接着,我会在右下角添加一个半透明的水印,然后保存这个文件。
在添加水印之前,我会先复制一份图片,并将其缩小到缩略图的大小(同样保持比例),然后把它保存在一个单独的文件夹里。
PIL的问题:
关于缩放,我希望能有一种智能缩放的方法(保持比例)。另外,我在保存JPEG格式时似乎对质量的控制不太好。为了保持最佳质量,我不得不保存为PNG格式,这样文件会比较大。
至于缩略图,读完PIL的文档后,我觉得这可能会比较困难,但我也可能理解错了。
我的问题:
有没有其他更先进的Python图像库,可能更新一些,或者包含我需要的一些功能?有没有公共函数可以实现我想要的功能?我不介意自己写这些代码,但想先确认一下。谢谢!
3 个回答
在紧急情况下,可以把图片转换成一个numpy数组,随意修改后再转换回去。
我同意Jim的看法,关于比例的问题。你提到的这个操作其实很简单,可以随时直接写进去,所以我觉得根本不需要去找API里的功能或选项。你调用.resize(factor = 0.8, keepRatio = True )的时候,打的字数和直接写.resize(hFactor = 0.8, vFactor = 0.8)是一样的。
至于库,你可以看看imageMagick和PythonMagick的结合: http://www.imagemagick.org/script/index.php
这个库可以进行图片大小调整(而且效果不错),支持多种格式的输出,还可以直接添加文字,或者如果你有自己的水印,也可以简单地合成。
在我处理相关问题的最近几次中,我用的是这个而不是PIL,对于我需要的简单功能,我觉得很满意。虽然我是通过magick++来使用的,而不是Python的绑定,但我觉得体验应该差不多。不过我对PIL不太了解,所以不太清楚它们之间的比较。
关于调整大小,我希望它能有一种智能调整的方法(保持比例)。
考虑到这可能在Python里只需要一两行代码,我不明白为什么这需要放在库的接口里。
另外,我在保存为JPEG格式时,似乎对质量水平的控制不太多。
引用一下手册:
save方法支持以下选项:
质量
图像质量的评分,从1(最差)到95(最好)。默认值是75。超过95的值应该避免;100会完全禁用JPEG的量化阶段。
你试过这个吗?如果试过,为什么没有帮助呢?