在不同的偏移量上包装方形图像

时间:2014-03-05 12:04:50

标签: php image merge imagick

我有一个网站截图,固定宽度和高度说600x400px,现在我希望这个图像与其他桌面屏幕上的图像合并。现在该屏幕不是正方形或矩形,这意味着我的图像需要适合屏幕的桌面。我只想在(x1,x2)(y1,y2)坐标中填充我的截图图像。

enter image description here

我需要的是黑色图像需要适合笔记本电脑的黑屏区域。

我搜索了Imagick,但不确定使用哪种功能。作为参考我试图做像placeit.net

这样的事情

请帮助..

1 个答案:

答案 0 :(得分:3)

从技术上讲,您需要使用仿射透视转换将要叠加的图像转换为背景图像。这有点难。

幸运的是,Image Magick中有一种更简单的方法,您只需在源图像空间中定义4个点,然后在最终图像空间中定义4个点,Image Magick就可以为您完成所有计算。

使用您提供的图片和代码:

<?php

$overlay = new Imagick(realpath("../images/overlay.jpg"));
$imagick = new Imagick(realpath("../images/Screeny.png"));

$overlay->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);

$width = $overlay->getImageWidth();
$height = $overlay->getImageHeight();

$points = array(
    0, 0,              364, 51,   
    $width, 0,         473.4, 23, 
    0, $height,         433.5, 182,  
    $width, $height,    523, 119.4 
);

$overlay->modulateImage(97, 100, 0 );
$overlay->distortImage(Imagick::DISTORTION_PERSPECTIVE, $points, TRUE );

//The offsets should be the minimum of the x and y values
$imagick->compositeImage($overlay, Imagick::COMPOSITE_OVER, 364.5, 23.5);

header("Content-Type: image/png");
echo $imagick->getImageBlob();

产生的图像非常像:

picture embedded in other image

btw我建议以高于所需的分辨率进行此操作,然后进行下采样,并对叠加图像应用透明模糊,尝试使其看起来更逼真。