我想使用Wand(imagemagick)为python创建图像缩略图(250x250px)。
我希望结果类似于PHP的imagecopyresampled()
** 功能,如果可能的话,不会有质量损失。
我的目录结构如下:
> main folder (level 1) -> only one
>> company folder (level 2 - inside main folder) -> 286 company folders
>>> product folder (level 2 - inside each company folder)
>>> property folders (level 2 - inside each company folder) -> number depending on number of properties that each company owns
>>>> imagename.jpg (level 3 - inside each property folder) -> number depending on number of images.
>>>> imagename_thumb.jpg (level 3 - inside each property folder) -> old, smaller thumbs, one for every original image in folder. These should be deleted/replaced with new ones.
现在我想要实现的是为每个imagename.jpg图像创建缩略图(如前所述),用新的图像替换旧的imagename_thumb.jpg图像。
请注意:产品文件夹中也有一些图像,但我不想为这些创建拇指,所以在循环浏览文件时是否可以避免使用此文件夹?
原因:我们最近决定重新设计使用更大缩略图的在线应用程序。手动更换所有现有的较小缩略图几乎是不可能的。
**解释imagecopyresampled()
功能(裁剪,重新采样),以便更好地了解我想要达到什么样的拇指:
imagecopyresampled()将一个图像的矩形部分复制到 另一个图像,平滑地插值像素值,以便在 特别是,减小图像的大小仍然保留很多 清晰度。
换句话说,imagecopyresampled()将采用矩形区域 src_image的宽度为src_w,高度为src_h的位置(src_x,src_y) 并将其放在宽度为dst_w和dst_image的矩形区域中 高度dst_h在位置(dst_x,dst_y)。
如果源和目标坐标和宽度和高度 不同的是,图像片段的适当拉伸或收缩会 被执行。坐标指的是左上角。这个 函数可用于复制同一图像中的区域(如果 dst_image与src_image相同但是如果区域重叠了 结果将无法预测。
答案 0 :(得分:1)
从我对same question on superuser的回复中重新发布。 (在你明显决定使用Wand之前。所以你应该交换子进程调用来转换为适当的Wand调用。)
import os
import subprocess
for root, dirs, files in os.walk('company 3\company 3 property'):
images = [os.path.join(root, f) for f in files if f.endswith('.jpg') and not '_thumb' in f]
for f in images:
outbase = f[:-4] # simply remove '.jpg'
out = outbase += '_thumb.jpg'
args = ['convert', f, '-scale', '250x250', out]
subprocess.call(args)