是否可以通过裁剪到固定大小来使用图像

时间:2016-10-13 10:47:11

标签: php

我有两个不同的图像,一个在我的本地机器中,另一个在web中。我想合并这两个图像,我有一切,但我的问题是这两个图像的宽度和高度不一样。我的本地图像是一个掩码,在线图像需要适合本地。本地图片尺寸400x400。

问题:如果在线图片尺寸低于/大于本地图像尺寸,则图像只取实际尺寸,不适合遮罩图像。

现在我该怎么做才能使这些图像相互适合?

My output Image

我尝试的是[从网站收集] -

//define the width and height of our images
define("WIDTH", 400);
define("HEIGHT", 400);

$dest_image = imagecreatetruecolor(WIDTH, HEIGHT);

//make sure the transparency information is saved
imagesavealpha($dest_image, true);

//create a fully transparent background (127 means fully transparent)
$trans_background = imagecolorallocatealpha($dest_image, 0, 0, 0, 127);

//fill the image with a transparent background
imagefill($dest_image, 0, 0, $trans_background);

//take create image resources out of the 3 pngs we want to merge into destination image
$a = imagecreatefrompng('https://rickwgrundy.files.wordpress.com/2014/01/pt509_stick_figure_podium_speaking-348x370.png');
$b = imagecreatefrompng('400x400.png');

//copy each png file on top of the destination (result) png
imagecopy($dest_image, $a, 0, 0, 0, 0, WIDTH, HEIGHT);
imagecopy($dest_image, $b, 0, 0, 0, 0, WIDTH, HEIGHT);

//send the appropriate headers and save the image in the given link name
header('Content-Type: image/png');
imagepng($dest_image, "result.png", 9);

//destroy all the image resources to free up memory
imagedestroy($a);
imagedestroy($b);
imagedestroy($dest_image);

2 个答案:

答案 0 :(得分:0)

而不是 imagecopy($dest_image, $a, 0, 0, 0, 0, WIDTH, HEIGHT);您需要使用imagecopyresized http://php.net/manual/en/function.imagecopyresized.php

复制并调整图片大小

因此,您需要将imagecopy($dest_image, $a, 0, 0, 0, 0, WIDTH, HEIGHT);替换为:

$image_current_width = imagesx($a);
$image_current_height = imagesy($a);
imagecopyresized($dest_image, $a, 0, 0, 0, 0, WIDTH, HEIGHT, $image_current_width , $image_current_height );

这会在复制图像时调整图像大小。

答案 1 :(得分:0)

是可能,但您的网络图片不是400x400。你的网络图像348X370所以。如果您的本地图像348X370 100%正常工作。我在您的网络图像上尝试我的本地图像,然后工作。 my image and your web image

我的代码在这里

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x,$src_y, $src_w, $src_h, $pct)
{
$cut = imagecreatetruecolor($src_w, $src_h);
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}

$image1 = imagecreatefrompng('https://rickwgrundy.files.wordpress.com/2014/01/pt509_stick_figure_podium_speaking-348x370.png'); //348 x 370
$image2 = imagecreatefrompng('b.png'); //348 x 370
imagealphablending($image1, false);
imagesavealpha($image1, true);

imagecopymerge_alpha($image1, $image2, 10, 9, 0, 0, 348, 370, 100);
header('Content-Type: image/png');

imagepng($image1);