Please wait. Loading …

Перейти на главную страницу Горячие цены

Справочник

Генерируем привьюшки картинок

Формирование маленьких картинок (привьюшек) из больших может быть осуществлено двумя способами:

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

Для реализации данных схем с помощью php необходимо установить gd библиотеку и скопировать приведенный ниже класс pictureReduction. Класс состоит из двух свойств: ширины $width и высоты $height маленькой картинки; и двух методов: уменьшения без обрезания withoutCutting() и уменьшения с обрезанием withCutting().

class pictureReduction{
var $width;
var $height;


// Формирование маленькой картинки без обрезания
function withoutCutting($photo, $new_photo){


$th_width=$this->width;
$th_height=$this->height;
$im = imagecreatefromjpeg($photo);
$width=imageSX($im);
$height=imageSY($im);


if (($width/$height) < ($th_width/$th_height)){
$im1=imagecreatetruecolor($th_width, $th_width*($height/$width));
imagecopyresampled($im1, $im, 0, 0, 0, 0, $th_width,
$th_width*($height/$width), $width, $height);
$im2=imagecreatetruecolor($th_width, $th_height);
imagecopy($im2, $im1, 0,0,0,0,$th_width,$th_height);

}
else {
$im1=imagecreatetruecolor(($width*$th_height)/$height, $th_height);
imagecopyresampled($im1, $im, 0, 0, 0, 0, ($width*$th_height)/$height, $th_height, $width, $height);
$im2=imagecreatetruecolor($th_width, $th_height);
imagecopy($im2, $im1, 0,0,0,0,$th_width,$th_height);
}

if (imagejpeg($im2, $new_photo, 100)){
imagedestroy($im);
imagedestroy($im1);
imagedestroy($im2);
return true;
}
else{
imagedestroy($im);
imagedestroy($im1);
imagedestroy($im2);
return false;
}
}

// Формирование маленькой картинки с обрезанием
function withCutting($photo, $new_photo){

$th_width=$this->width;
$th_height=$this->height;
$im = imagecreatefromjpeg($photo);
$width=imageSX($im);
$height=imageSY($im);

if ($width > $height){
$im1=imagecreatetruecolor($th_width, $th_width*($height/$width));
imagecopyresampled($im1, $im, 0, 0, 0, 0, $th_width, $th_width*($height/$width), $width, $height);

}
else {
$im1=imagecreatetruecolor(($width*$th_height)/$height, $th_height);
imagecopyresampled($im1, $im, 0, 0, 0, 0, ($width*$th_height)/$height, $th_height, $width, $height);
}

if (imagejpeg($im1, $new_photo, 100)){
imagedestroy($im);
imagedestroy($im1);
return true;
}
else{
imagedestroy($im);
imagedestroy($im1);
return false;
}
}
}

Все что осталось, это создать экземпляр класса, задать свойства $width, $height и вызвать нужный метод, задав пути к большой и к генерируемой маленькой картинкам.

$image = new pictureReduction();
$image->width=100;
$image->height=150;
$image->withCutting("big_image.jpg", "small_image.jpg");

Вернуться к списку

Справочник Runa