【问题标题】:Merge two images with GD Library, have 1 repeat in background用 GD 库合并两个图像,在背景中有 1 个重复
【发布时间】:2013-04-27 08:07:36
【问题描述】:

我想拍摄一张具有透明度的图像,然后将其覆盖在 60x60(任意尺寸)图像的顶部,该图像在第一张图像的宽度和长度上重复...

所以本质上使用图像 2 作为图像 1 顶部的重复背景图像。

编辑:

好的,所以我使用 One Trick Pony 的解决方案,但尝试修改它以在宽度小于高度的情况下从矩形创建方形图像,但不拉伸原始图像而是将其居中。我能够使图像居中,但在覆盖图像停止后重复背景不会继续重复。

代码如下:

    <?php

    $overlay    = imagecreatefrompng('../images/' . $_REQUEST['overlay']);

    $repeating  = '../images/' . $_REQUEST['repeating'];
    $ext = explode('.', $_REQUEST['repeating']);
    $ext = strtolower($ext[1]);


    if ($ext == 'gif')
        $repeating  = imagecreatefromgif($repeating);
    elseif ($ext == 'png')
        $repeating  = imagecreatefrompng($repeating);
    elseif ($ext == 'jpg' || $ext == 'jpeg')
        $repeating  = imagecreatefromjpeg($repeating);


    $w          = imagesx($overlay);
    $h          = imagesy($overlay);
    if ($w < $h) 
        $w = $h;

    $output = imagecreatetruecolor($w, $h);
    imagealphablending($output, true);


    imagesettile($output, $repeating);
    imagefill($output, 0, 0, IMG_COLOR_TILED);
    imagedestroy($repeating);    

    $offsetx = ($w - imagesx($overlay)) / 2;

    imagecopy($output, $overlay, $offsetx, 0, 0, 0, $w, $h);
    imagedestroy($overlay);


    header('Content-Type: image/png');
    imagepng($output);
    imagedestroy($output);



    ?>

编辑 2:

叠加层:http://72.167.52.68/~viisi/ebaylist/images/back_test2.png

重复:http://72.167.52.68/~viisi/ebaylist/images/back_test.gif

预期结果(但继续在整个图像中重复):http://72.167.52.68/~viisi/ebaylist/image/previewImage.php?overlay=back_test2.png&amp;repeating=back_test.gif

【问题讨论】:

  • 嗨,Vitaliy,好主意 - 活跃起来,编写一些代码,如果您需要帮助,请在此处发布!我认为 PHP 的 GD 函数将是一个好的开始。
  • 我明天回到办公室就开始做这件事,等我有事后会公布结果。

标签: php gd imagecreatefrompng


【解决方案1】:
$overlay = imagecreatefrompng('/path/to/transparent/image.png');
$repeating = imagecreatefrompng('/path/to/repeating/image.png');

// create a new image matching overlay size
$w = imagesx($overlay);
$h = imagesy($overlay);
$output = imagecreatetruecolor($w, $h);
imagealphablending($output, true);
imagesavealpha($output, true);

// tile repeating image on it
imagesettile($output, $repeating);
imagefill($output, 0, 0, IMG_COLOR_TILED);
imagedestroy($repeating);    

// now add overlay on top
imagecopy($output, $overlay, 0, 0, 0, 0, $w, $h);
imagedestroy($overlay);

// send to screen
header('Content-Type: image/png');
imagepng($output);
imagedestroy($output);

【讨论】:

  • 如果您发布两张图片和另一张具有预期输出的图片
  • 好像少了两个?
  • 很抱歉,我一定是不小心更改了它们。我现在输入了正确的。
  • 嗯,问题似乎是这个块:if ($w &lt; $h) $w = $h; 有什么理由吗?生成的图像是否需要是方形的?如果是这样,您应该为复制功能提供真实的叠加图像宽度,而不是您刚刚修改的$wimagecopy($output, $overlay, $offsetx, 0, 0, 0, imagesx($overlay), $h);
  • 它不一定是方形的,但我想使生成的图像更宽,覆盖居中。
猜你喜欢
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 2016-12-28
  • 1970-01-01
  • 2011-12-24
  • 2019-08-04
  • 2021-12-10
相关资源
最近更新 更多