在新的、更大的图像中居中图像资源 (PHP/imagecopy)

Posted

技术标签:

【中文标题】在新的、更大的图像中居中图像资源 (PHP/imagecopy)【英文标题】:centering image resource in new, larger image (PHP/imagecopy) 【发布时间】:2012-05-18 19:19:08 【问题描述】:

我正在尝试构建一个函数,该函数采用 php 图像资源并将其放置在预定大小的新图像的中心。我确实想要缩放图像;相反,我想将它按原样放置在放大的“画布”的中心。

$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

这里有任何提示或明显的错误吗?感谢您的任何建议。

【问题讨论】:

【参考方案1】:

代替imagecopy(),这似乎有效:

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

【讨论】:

以上是关于在新的、更大的图像中居中图像资源 (PHP/imagecopy)的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD 方法 imagecopy 比原始图像更大的图像文件

响应图像 srcset 忽略 div 宽度以在 Firefox 中显示比所需更大的图像

Python 在图像中的单词之间产生更大的间隙

使用 IMG 地图显示更大的图像

将 Mat 图像转置为更大的 Mat 图像,Opencv

UIImageView 在加载更大的图像后调整大小