PHP функция генерирования превью изображения
В сети есть много функций для генерирования маленьких изображений. Особенность моей заключается в том что она “умная”.
Например нам нужно уменьшить изображение размером 1000х500 до размера 500х500. Большинство просто сделает новое изображение 500х250 – моя же сделает размером 500х500 и не испортит ничего -попросту вырежет середину. При том функция уменьшает до любых размеров, например: 100х160, 234х34, 320х240, и при этом правило остается.
Если же изображение маленькое то лишняя часть заполнится белым цветом ( или тем что вы пожелаете ).
На вход функция получает переменную-ссылку на открытое зарание изображение – на выход же отдает переменную уменьшенного изображения.
Код функции
<?php /* Author: Golubovsky Alexey Email: itinua@gmail.com Site: golubovsky.name */ function resizeImg( &$i, $width, $height ) { $thumb = imagecreatetruecolor( $width, $height ); $white = imagecolorallocate( $thumb, 255, 255, 255 ); //цвет заполнения пустого пространства imagefilledrectangle( $thumb, 0,0, $width, $height, $white ); $iWidth = imagesx( $i ); $iHeight = imagesy( $i ); $iKoeficient = $width / $height; $thumbKoeficient = $iWidth / $iHeight; $ix1 = 0; $ix2 = $width; $iy1 = 0; $iy2 = $height; if ( $width > $iWidth && $height > $iHeight ) { $ix1 = round( $width - $iWidth ) / 2; $ix2 = $iWidth; $iy1 = round( $height - $iHeight ) / 2; $iy2 = $iHeight; $x1 = 0; $x2 = $iWidth; $y1 = 0; $y2 = $iHeight; } elseif ( $width > $iWidth ) { $iy1 = 0; $iy2 = $height; $coeficient = $height / $iHeight; $newwidth = round( $iWidth * $coeficient ); $ix1 = round( ($width - $newwidth)/2 ); $ix2 = $newwidth; $x1 = 0; $x2 = $iWidth; $y1 = 0; $y2 = $iHeight; } elseif ( $height > $iHeight ) { $ix1 = 0; $ix2 = $width; $coeficient = $width / $iWidth; $newheight = round( $iHeight * $coeficient ); $iy1 = round( ($height - $newheight)/2 ); $iy2 = $newheight; $x1 = 0; $x2 = $iWidth; $y1 = 0; $y2 = $iHeight; } else { if ( $iKoeficient > $thumbKoeficient ) { //если сторона исхорного изобращения пропорционально меньше изображения что нужно получить то нужно отслеживать по высоте $x1 = 0; $x2 = $iWidth; $coeficient = $width / $iWidth; $y2 = round( $height / $coeficient ); $y1 = round( ($iHeight - $y2)/2 ); } else { $y1 = 0; $y2 = $iHeight; $coeficient = $height / $iHeight; $x2 = round( $width / $coeficient ); $x1 = round( ( $iWidth-$x2 )/2 ); } } imagecopyresampled( $thumb, $i, $ix1, $iy1, $x1, $y1, $ix2, $iy2, $x2, $y2 ); return $thumb; } ?>
Примеры использования
$i = imagecratefromjpeg( 'myfile.jpg' ); $thumb = resizeImg( &$i, 320, 240 ); header( 'Content-type: image/png' ); imagepng( $thumb ); imagedestroy( $i ); imagedestroy( $thumb ); die();
В сети эта функция используется на сайте www.connectnews.ru в виде генератора изображений на главной странице.
REPLY))
Огромное спасибо за алгоритм картинок
очень полезная вещь
REPLY))
А в чём прикол заполнять пустое пространство белым/чем пожелаете?
REPLY))
Прикол в том что верстать не нужно под разные размеры картинок. (если они меньше размера нужного)
REPLY))
Функция полезная автору спасибо, только пример использования не очень практичен в плане содействия верстальщика и прогорамиста, можно организовать так что-бы верстальщик выбирал в штмле размер а скрипт обрабативал, короче вот как здесь показано: //sitear.ru/material/preview_of_picture_with_php
На мой взгляд так будет проще в плане работы с дизайном, нет необходимости копаться в коде.
REPLY))
Каждый раз генерить превью через PHP? Это очень неразумно.