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);
Сначала входной файл, потом выходной, потом размер по ширине и можно по высоте. Высоту можно не указывать. Наслаждайтесь =)
Постовой: Не все владеют английским языком на достаточном уровне. Но бывают случаи, когда необходима личная встреча с иностранцем. К счастью, есть ряд организаций, которые предоставляют как услугу устный перевод. Это самый лучший выход из сложной ситуации.