【问题标题】:Create thumbnails for images inside specific folders为特定文件夹中的图像创建缩略图
【发布时间】:2013-08-25 16:11:51
【问题描述】:

我想使用 Python 的 Wand (imagemagick) 创建图像缩略图 (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_x,src_y) 的宽度 src_w 和高度 src_h 的 src_image 并将其放置在宽度为 dst_w 的 dst_image 的矩形区域中,并且 位置 (dst_x,dst_y) 处的高度 dst_h。

如果源和目标坐标以及宽度和高度 不同,图像片段的适当拉伸或收缩将 被执行。坐标指的是左上角。这个 函数可用于复制同一图像中的区域(如果 dst_image 与 src_image 相同)但如果区域重叠 结果将是不可预测的。

【问题讨论】:

  • 这读起来像需求规范,并没有指定您实际尝试过的任何内容
  • 我更像是一个 java / PHP 程序员,并且对 python 有点陌生,这是非常不同的。我正在尝试做这个一次性的本地工作来替换所有的缩略图。我知道如何一一做,但不知道如何循环特定文件夹。

标签: python wand


【解决方案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)

【讨论】:

  • 这里的问题是公司的结构只是一个样本。有250+个公司文件夹,每个公司文件夹还可以有多个属性文件夹。那么是否可以从顶级文件夹开始(检查问题以查看解释的结构)并遍历除产品文件夹之外的所有子文件夹?
  • @BikerJohn 是的。您可以通过从dirs 字典中删除目录来跳过目录。
猜你喜欢
  • 2011-10-27
  • 2010-11-23
  • 2011-08-12
  • 2016-04-08
  • 1970-01-01
  • 2017-03-19
  • 2011-11-01
  • 1970-01-01
  • 2016-07-02
相关资源
最近更新 更多