使用GD合并2张相同大小的图像

时间:2018-09-18 20:58:48

标签: php gd imagick

我正在查看php手册,但未成功使其在另一张图片@IBAction func sendButtonTapped(_ sender: UIButton) { var items = [Itemm]() for indexPath in self.selectedCells { let data = self.data![indexPath.section] let contact = data.contacts[indexPath.row] let newItem = Itemm(unitNo: data.unitNo, personId: contact.id) items.append(newItem) } let welcome = Welcome(items: items) // Now you can encode and send welcome } 上显示1张透明图片

.jpg

两个图像的大小相同,唯一的区别是第二个图像是透明的,并且在特定位置带有徽标

echo只打印第一张图像

编辑

图像复制合并

$image1 = imagecreatefromjpeg('image.jpg'); 
$image2 = imagecreatefrompng('watermark.png');

imagecopy($image1, $image2, 0, 0, 0, 0, imagesx($image1), imagesy($image1)); 

imagejpeg($image1, "ok.jpg");    

echo "<img src='ok.jpg' alt='test' >";

图像

watermarker.png watermarker.png

image.jpg image.jpg

ok.jpg-这应该是结果,但是在生成文件ok.jpg时仅出现T恤 ok.jpg - This should be the result, but only the T-shirt appears when it generates the file ok.jpg

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以尝试重新放置徽标/水印。

您只需要在watermark.png中获取四个角的坐标(左和上),然后将它们替换为image.jpg的四个坐标:

client = gspread.authorize(creds)
ws = client.open("my spreadsheet").sheet1
...

for xml in for xml in soup.findAll('items'):
  item = {
      ...
  }
  ws.append_row(item)

您可以自由使用控制点。

但是要小心,如果您使用不同尺寸的图像,因为如果目标坐标之一超出了图像尺寸以使其变形(水印),则必须更改为:

$image = new Imagick('image.jpg');
$watermark = new Imagick('watermark.png');
$controlPoints = [
    300,1700 /* watermark.png (left,top) coordinate moves to image.jpg (left,top) coordinate */ 800,900, // TOP LEFT CORNER
    1963,1700, /* to */ 1450,900, // TOP RIGHT CORNER
    1963,2500, /* to */ 1450,1100, // BOTTOM RIGHT CORNER
    300,2500, /* to */ 800,1100, // BOTTOM LEFT CORNER
];
$watermark->distortImage(Imagick::DISTORTION_BILINEAR, $controlPoints, false);
$image->addImage($watermark);
$result = $image->mergeImageLayers(Imagick::LAYERMETHOD_MERGE);
echo '<img src="data:image/jpg;base64,'. base64_encode($result->getImageBlob()) . '" alt="test" />';

您必须更改第一个和第三个参数。