2013-08-25 3 views
0

Я хотел бы создать уменьшенные изображения изображений (250x250px) с помощью Wand (imagemagick) для python.Создание эскизов изображений внутри определенных папок

Я хочу, чтобы результаты были похожи на 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() функции (растениеводство, RESAMPLE) для лучшего понимания, какой палец я хочу добиться:

imagecopyresampled() копирует прямоугольную часть одного изображения в другое изображение , плавно интерполируя значения пикселей, так что в в частности, уменьшение размера изображения по-прежнему сохраняет значительную значимость .

Другими словами, imagecopyresampled() будет иметь прямоугольную область от src_image шириной src_w и высотой src_h в положении (src_x, src_y) и поместить его в прямоугольной области dst_image шириной dst_w и высоты dst_h на position (dst_x, dst_y).

Если координаты и ширина и высота источника и места назначения различаются, то будет выполнено соответствующее растяжение или сжатие фрагмента изображения . Координаты относятся к верхнему левому углу. Эта функция может использоваться для копирования областей внутри одного изображения (если dst_image совпадает с src_image), но если области перекрываются, то результаты будут непредсказуемыми.

+0

это читается как спецификации требований и не все, что вы на самом деле пытались –

+0

я не указать больше java/PHP-программиста и я совершенно новый для python, который очень отличается. Я пытаюсь сделать это одноразовое местное задание, чтобы заменить все миниатюры. Я знаю, как это сделать один за другим, но не знаю, как перебирать определенные папки. –

+0

http://docs.python.org/2/library/os.html#os.walk –

ответ

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) 
+0

Проблема в том, что структура компании является всего лишь образцом. Есть 250+ папок компании, и каждая папка компании также может иметь несколько папок свойств. Так можно ли начать с папки верхнего уровня (проверить вопрос, чтобы увидеть объясненную структуру) и просмотреть все дочерние элементы, исключая папки продуктов? –

+0

@BikerJohn Да. Вы можете пропустить каталоги, удалив их из словаря 'dirs'. –

Смежные вопросы