Скрипт TimThumb PHP

В предыдущем посте я постарался дать подробное руководство как получить первое изображение с поста в WordPress, которое в дальнейшем можно использовать в качестве анонса для статьи, но данный способ не позволяет «гибко» масштабировать изображения, масштабирование возможно только при изменении значений атрибутов высоты и ширины в теге <img> и если вы захотите сделать превью квадратным, например 200 x 200px, изображение будет искажено (предполагается, что оригинал изображения — прямоугольник), следовательно, в большинстве случаев вам придется масштабировать изображение по одной из сторон.

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

Итак, для реализации данной задачи мы воспользуемся замечательным скриптом TimThumb PHP. Данный скрипт позволяет автоматически изменить размер изображения с заданными настройками и хранить превью в кэше. Для работы скрипта требуется библиотека GD установленная на вашем хостинге и PHP версии не ниже 4.3.

Для начала необходимо скачать скрипт, распаковать и разместить в любой папке с вашим сайтом, предположим, что вы используете WordPress. Разместите скрипт timthumb.php в папке с вашей темой (скрипт может находится в любой папке или вне ее, главное правильно указать к нему путь).

После первого запуска скрипт TimThumb PHP автоматически создаст папку /cache/ с правами доступа 777, если на вашем хостинге есть какие-либо ограничения, то создайте папку /cache/ в той же папке, где располагается сам скрипт и установите на нее права 777.

Осталось применить скрипт к изображению, размер которого необходимо изменить, вот пример как это делается:

<img src="timthumb.php?src=/images/default.jpg&h=150&w=150&zc=1" alt="">

Основные параметры используемые в сценарии:

  • w: width - ширина превью;
  • h: height - высота превью;
  • zc: zoom crop (0 or 1) - этот параметр остался загадкой...
  • q: quality (default is 75 and max is 100) - качество превью.

Для того чтобы ускорить кеширование, добавьте следующие правила в файл .htaccess:

RewriteEngine on
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]

Теперь перейдем от теории к практике, воспользуемся этим скриптом на движке WordPress для создания миниатюр размером 200 x 200px, предположим, что вы ознакомились с материалом предыдущей статьи (см. ссылку, которую я дал в начале топика).

Вот так выглядит код, с помощью которого мы «отлавливали» первое изображение в WordPress:

<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
  <img src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" width="550"/>
</a>

изменим его следующим образом:

<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
  <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php echo catch_that_image() ?>&w=200&h=200&zc=1&q=90" alt="<?php the_title(); ?>"/>
</a>

Таким образом, нам не требуется создавать миниатюры вручную, если вы захотите обновить дизайн сайта и вам потребуются миниатюры другого размера, то достаточно будет заменить параметры &w=200&h=200 в строке выше и очистить папку с кэшем, чтобы миниатюры создались заново (помните, что специальной папки для миниатюр не существует, т.е. все они хранятся в папке /cache/.

Некоторые важные параметры, которые можно изменить непосредственно в файле timthumb.php и задать настройки по-умолчанию:

33    define ('CACHE_SIZE', 250);    // максимальное кол-во файлов в кэше
34    define ('CACHE_CLEAR', 5);    // максимальное кол-во файлов удаляемых за раз из кэша

68    $quality = preg_replace("/[^0-9]+/", "", get_request("q", 80));    // качество миниатюр

72    $new_width = 100;    // ширина изображения
73    $new_height = 100;    // высота изображения

89    ini_set('memory_limit', "50M");    // объем кэша

515    $cache_file = md5($cachename) . '.png';    // формат изображений в кэше

Если что-то вдруг не работает:

  • проверьте, чтобы были указаны правильно абсолютные пути до скрипта и изображения в выражении;
  • возможно на папку, в которой находится скрипт timthumb.php, не даны права 777;
  • после изменения любых параметров миниатюры (высоты, ширины, качества...) не забывайте очистить папку /cache/;

или пишите в комментариях, попробуем разобраться.

Написать комментарий