Кодерастам от кодераста!

Блог программиста » Новости » Программирование

PHP: ресайз картинок

Уже писал вам о том, как накладывать водные знаки на картинки. Способ основывается на моём методе изменения размера изображений. Но недавно я понял, что он фигово работает для PNG. Размеры изменяет как надо, а прозрачность теряет. Держите работающий способ изменения размеров изображения на PHP:

// Возвращает данные об изображении

function image_get_info($file = NULL){

if(!is_file($file)) return false;

if(!$data = getimagesize($file) or !$filesize = filesize($file)) return false;

$extensions = array(1 => "gif", 2 => "jpeg", 3 => "png", 4 => "swf", 5 => "psd", 6 => "bmp", 7 => "tiff", 8 => "tiff", 9 => "jpc", 10 => "jp2", 11 => "jpx", 12 => "jb2", 13 => "swc", 14 => "iff", 15 => "wbmp", 16 => "xbmp");

return array("width" => $data[0], "height" => $data[1], "extension" => $extensions[$data[2]], "size" => $filesize, "mime" => $data["mime"]);

}


// Для прозрачности

function setTransparency($new_image, $image_source){

$transparencyIndex = imagecolortransparent($image_source);

$transparencyColor = array("red" => 255, "green" => 255, "blue" => 255);

if ($transparencyIndex >= 0)

$transparencyColor = imagecolorsforindex($image_source, $transparencyIndex);   

$transparencyIndex = imagecolorallocate($new_image, $transparencyColor["red"], $transparencyColor["green"], $transparencyColor["blue"]);

imagefill($new_image, 0, 0, $transparencyIndex);

imagecolortransparent($new_image, $transparencyIndex);

}


// Изменяет размер изображения

function image_resize($img_file = NULL, $target_file = NULL, $width = 0, $height = 0){

if(!$target_file) trigger_error("Error. Function: image_resize(). Argument "target_file" was empty.");

if(!$width and !$height and !ctype_digit($width) and !ctype_digit($height)) trigger_error("Error. Function: image_resize(). Argument "width" and "height" was empty or incorrect.");

if(!$source_im_info = image_get_info($img_file)) return false;

if(!in_array($source_im_info["extension"], array("gif", "jpeg", "png"))){

copy($img_file, $target_file);

}else{

if($width and !$height) $height = $width*$source_im_info["height"]/$source_im_info["width"];

if(!$width and $height) $width = $height*$source_im_info["width"]/$source_im_info["height"];

$img_open_func = "imagecreatefrom".$source_im_info["extension"];

$source_im = $img_open_func($img_file);

$result_im = imagecreatetruecolor($width, $height);

setTransparency($source_im, $result_im);

if(!@imagecopyresampled($result_im, $source_im, 0, 0, 0, 0, $width, $height, $source_im_info["width"], $source_im_info["height"])) return false;

$img_close_func = "image".$source_im_info["extension"];

if(!$img_close_func($result_im, $target_file)) return false;

imagedestroy($source_im);

imagedestroy($result_im);

return true;

}

}

Используется он просто:

image_resize($fn_original, $fn, 300);

Сначала входной файл, потом выходной, потом размер по ширине и можно по высоте. Высоту можно не указывать. Наслаждайтесь =)

Постовой: Не все владеют английским языком на достаточном уровне. Но бывают случаи, когда необходима личная встреча с иностранцем. К счастью, есть ряд организаций, которые предоставляют как услугу устный перевод. Это самый лучший выход из сложной ситуации.