-1

Недавно мы решили изменить дизайн нашего старого приложения, в котором использовались миниатюры размером 150x150. Новые большие пальцы размером 250х250.

Теперь, что мне нужно сделать, это одноразовый процесс, чтобы заменить все старые 150 превью, которые были созданы до редизайна, на 250.

Функция, используемая для создания новых миниатюр, была в php's imagecopyresampled . Я хотел бы найти что-то, что дало бы мне похожие / такие же результаты.

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

Кроме того, само задание немного сложнее, так как есть некоторые папки / файлы, которые необходимо исключить при переборе файлов.

Состав:

level 1: company folder
level 2: company property folder, company products folder
level 3: there are images that have to be resized inside company property folder.

Образец структуры:

company 1
company 2
company 3
----company 3 property
--------image1.jpg (original size)
--------image1_thumb.jpg (old 150 thumb)
--------image2.jpg
--------image2_thumb.jpg
----company 3 products (folder also includes images but they should not be resized)

По сути, мы работаем только с файлами оригинального размера (без _thumb) внутри папок свойств. Старые изображения большого пальца 150px должны быть удалены и / или заменены новыми изображениями размером 250px.

2 ответа2

2

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

Конкретная магия, которую вы ищете, находится в обращении.

1

Как говорит FvD, ImageMagick очень хорош для изменения размера изображений.

Чтобы найти все соответствующие файлы и выполнить convert , я бы предложил установить findutils или, что еще лучше, MSYS , потому что последний включает не только findutils, но и множество других полезных вещей (например, подходящую оболочку).

Если у вас установлен Python, вы можете написать простую программу, которая использует os.walk() для перемещения по дереву файловой системы и использует subprocess.call() для convert файла.

Частичный пример;

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)

Изменить: Если у вас есть каталог, который вы не хотите посещать, просто удалите его из словаря dirs . Смотрите документацию по os.walk() .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .