2012-05-18 2 views
1

Я пытаюсь создать функцию, которая использует ресурс изображения 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 
} 

Все упоминания или очевидные ошибки здесь? Спасибо за любые предложения.

ответ

3

На месте imagecopy(), это, казалось, работали:

imagecopymerge($img, $image, $xoffset, $yoffset, 0,0, $img_w, $img_h, 100);