Массовое изменение размеров изображений с помощью PHP и ImageMagick - PullRequest
0 голосов
/ 05 июля 2010

В первые дни моего сайта я разрешал людям загружать изображения любого размера, которые они хотели. Теперь у меня есть клиентская и серверная конфигурация, чтобы ограничить новые изображения до 2000 пикселей максимум, сохраняя при этом исходное соотношение.

Так что из старой конфигурации у меня есть куча каталогов с большими изображениями, которые мне нужно уменьшить, я хотел бы сделать это на стороне сервера в пакетном режиме (из-за ограничений пропускной способности на стороне клиента) и на весь срок службы я не могу решить это. Я понимаю, что это приведет к высокой загрузке ЦП на стороне сервера, поэтому я буду делать это в группах, распределенных в течение нескольких дней.

Из-за ограничений ОЗУ хоста я не могу использовать GD для масштабирования, поэтому мне доступен ImageMagick.

Пример группы, которую я бы сделал в 1 партии, выглядит следующим образом:
/ Изображения / 01/101 / abc.jpg
/ Images / 01/101 / random.jpg
/ Images / 01/101 / randomfile.jpg
/ Images / 01/184 / random.jpg
/ Изображения / 01/184 / photo.jpg
/ Images / 03/372 / randomnumber.jpg
/ Изображения / 03/372 / randomanything.jpg

Итак, я за чем-то, что может:

  • Рекурсивно просматривайте все каталоги и подкаталоги в поисках JPG, когда он найдет один -
    • Отработать коэффициент текущей ликвидности
    • Переименуйте исходный файл в origional.jpg.old
    • изменить размер файла максимум до 2000 пикселей по высоте / ширине, сохраняя соотношение сторон
    • записать файл на диск, используя имя файла origional.jpg
    • проверьте, что новый origional.jpg является действительным счастливым файлом
      • И если это счастливый файл, удалите origional.jpg.old
  • Затем обработайте следующий файл / папку.

Я застрял и хотел бы любую помощь, пожалуйста.

Спасибо Грег

1 Ответ

2 голосов
/ 05 июля 2010

Рекурсивно просматривайте все каталоги и подкаталоги в поисках JPG, когда он находит один

Используйте комбинацию RecursiveDirectoryIterator и RecursiveIteratorIterator, возможно вместе с RegexIterator,На этом сайте есть несколько примеров.

Определите текущее соотношение

Не нужно.

Переименуйте файл оригинала в оригинал.jpg.old

См. rename.

изменить размер файла до максимума 2000px по высоте / ширине, сохраняя соотношение сторон

См. Imagick::resizeImage или Imagick::scaleImage.

запись файла на диск с использованием имени файла origional.jpg

Imagick::writeImage

проверьте, что новый origional.jpg является действительным счастливым файлом

Ненужный.

И если это счастливый файл, удалите origional.jpg.old

См. unlink .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...