Подпишитесь на RSS

Сжимаем и режем картинки

This item was filled under [ Классы ]

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

  • Пропорциональным уменьшением до совпадения меньшей из сторон с заданным размером и обрезанием оставшейся части картинки (рис. 1). В том случае, когда требуется выдерживать как заданную ширину, так и высоту.
  • Пропорциональным уменьшением до совпадения большей из сторон с заданным размером (рис. 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");

Популярность: 31%

Tagged with: [ ]
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Комментарии