Скрипт TimThumb PHP
В предыдущем посте я постарался дать подробное руководство как получить первое изображение с поста в WordPress, которое в дальнейшем можно использовать в качестве анонса для статьи, но данный способ не позволяет «гибко» масштабировать изображения, масштабирование возможно только при изменении значений атрибутов высоты и ширины в теге <img> и если вы захотите сделать превью квадратным, например 200 x 200px, изображение будет искажено (предполагается, что оригинал изображения — прямоугольник), следовательно, в большинстве случаев вам придется масштабировать изображение по одной из сторон.
В этой статье рассмотрим скрипт, который позволит изменить размер изображения, сохранит его пропорции, при необходимости вырежет и сохранит все наши превью в отдельной папке (кэш). К тому же, все ниже приведенное потребует минимальных усилий и прекрасно работает на любом движке, точнее скрипт не зависит от используемой вами системы управления, так как он является самостоятельным.
Итак, для реализации данной задачи мы воспользуемся замечательным скриптом , скачать можно отсюда. Данный скрипт позволяет автоматически изменить размер изображения с заданными настройками и хранить превью в кэше. Для работы скрипта требуется библиотека 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/;
или пишите в комментариях, попробуем разобраться.
Большое спасибо.
P.S. отличный дизайн, хороший выбор.
просматриваю блог с начала его выхода. Удачи и успехов!
Спасибо, очень выручил. Кстати параметр zc (zoom crop) определяет способ обрезки тумбы. zc=1 – масштабирует пропорционально, отсекая лишнее. Допустим прямоугольное изображение 200х150 нужно обрезать до 100х100. Получается что он отрежет слева кусок и справа. А zc=0 в том же случае означает что картинка будет «съёжившейся» в ширину
Спасибо, очень полезная информация :)
crop – значит обрезать картинку под размер или ресайзить под размер :)