Я пытаюсь создать функцию, которая использует ресурс изображения PHP и помещает его в центр нового изображения с заданным размером. Я делаю не хочу увеличить изображение; скорее я хочу разместить его как-находится в центре расширенного «холста».centering image resource in new, larger image (PHP/imagecopy)
$img
- допустимый ресурс изображения - если я его верну, я получаю правильное исходное (необработанное) изображение. $canvas_w
и $canvas_h
- ширина и высота желаемого нового холста. Он создает правильный холст размера, но содержимое файла неожиданно становится черным, когда я возвращаю желаемый «исправленный» ресурс изображения ($newimg
).
// what file?
$file = 'smile.jpg';
// load the image
$img = imagecreatefromjpeg($file);
// resize canvas (not the source data)
$newimg = imageCorrect($img, false, 1024, 768);
// insert image
header("Content-Type: image/jpeg");
imagejpeg($newimg);
exit;
function imageCorrect($image, $background = false, $canvas_w, $canvas_h) {
if (!$background) {
$background = imagecolorallocate($image, 255, 255, 255);
}
$img_h = imagesy($image);
$img_w = imagesx($image);
// create new image (canvas) of proper aspect ratio
$img = imagecreatetruecolor($canvas_w, $canvas_h);
// fill the background
imagefill($img, 0, 0, $background);
// offset values (center the original image to new canvas)
$xoffset = ($canvas_w - $img_w)/2;
$yoffset = ($canvas_h - $img_h)/2;
// copy
imagecopy($img, $image, $xoffset, $yoffset, $canvas_w, $canvas_h, $img_w, $img_h);
// destroy old image cursor
//imagedestroy($image);
return $img; // returns a black original file area properly sized/filled
//return $image; // works to return the unprocessed file
}
Все упоминания или очевидные ошибки здесь? Спасибо за любые предложения.