Обрезать изображение с помощью imagecopyresampled + Jcrop

Я использую Jcrop для обрезки изображений от пользователя. Я следовал за учебником здесь: http://deepliquid.com/content/Jcrop_Implementation_Theory.html. Вот мой код

private function resizeImage($file_info)
{
$dst_w        = $dst_h        = 150;
$jpeg_quality = 90;

$src                  = realpath($file_info['directory'] . '/' . $file_info['name']);

// CHMOD before cropping
chmod($src, 0777);

switch (strtolower($file_info['mime'])) {
case 'image/jpeg':
$src_img = imagecreatefromjpeg($src);
break;
case 'image/png':
$src_img = imagecreatefrompng($src);
break;
case 'image/gif':
$src_img = imagecreatefromgif($src);
break;
default:
exit('Unsupported type: ' . $file_info['mime']);
}
$dst_img = imagecreatetruecolor($dst_w, $dst_h);

// Resize and crop the image
imagecopyresampled(
$dst_img, $src_img,                 // Destination and Source image link resource
0, 0,                               // Coordinate of destination point
$this->crop['x'], $this->crop['y'], // Coordinate of source point
$dst_w, $dst_h,                     // Destination width and height
$this->crop['w'], $this->crop['h']  // Source width and height
);

// Output the image
switch (strtolower($file_info['mime'])) {
case 'image/jpeg':
imagejpeg($dst_img, null, $jpeg_quality);
break;
case 'image/png':
imagepng($dst_img);
break;
case 'image/gif':
imagegif($dst_img);
break;
default:
exit('Unsupported type: ' . $file_info['mime']);
}
}

Я проверил, что каталог и файл доступны для записи (разрешение 0777). Все переменные, которые я использую, также хорошо определены, без ошибок. Тем не менее, окончательное изображение все еще в своем первоначальном виде, а не обрезается.

Кто-нибудь знает, почему это не работает? Любая помощь приветствуется.

0

Решение

вы используете list() чтобы получить ширину и высоту исходного изображения, но вы не используете его в своем imagecopyresampled() вызов. Все остальное выглядит хорошо, насколько я вижу, если это не решает проблему, вероятно, где-то еще в классе.

вот мой метод обрезки для справки, если это поможет.

    /**
* Crops the image to the given dimensions, at the given starting point
* defaults to the top left
* @param type $width
* @param type $height
* @param type $x
* @param type $y
*/
public function crop($new_width, $new_height, $x = 0, $y = 0){
$img = imagecrop($this->image, array(
"x" => $x,
"y" => $y,
"width" => $new_width,
"height" => $new_height
));

$this->height = $new_height;
$this->width = $new_width;

if(false !== $img) $this->image = $img;
else self::Error("Could not crop image.");

return $this;
}


метод изменения размера, для справки ..

/**
* resizes the image to the dimensions provided
* @param type $width (of canvas)
* @param type $height (of canvas)
*/
public function resize($width, $height){
// Resize the image
$thumb = imagecreatetruecolor($width, $height);
imagealphablending($thumb, false);
imagesavealpha($thumb, true);
imagecopyresampled($thumb, $this->image, 0, 0, 0, 0, $width, $height, $this->width, $this->height);

$this->image = $thumb;
$this->width = $width;
$this->height = $height;

return $this;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]