【问题标题】:Wrapping square image on different offsets在不同的偏移量上包裹方形图像
【发布时间】:2014-04-07 11:31:51
【问题描述】:

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

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

我搜索了 Imagick,但不确定要使用哪个功能。作为参考,我正在尝试做类似 placeit.net 的事情

请帮忙..

【问题讨论】:

  • @NishantSolanki 我知道 php gd 库,但不确定使用哪个函数或方法来满足我的要求。
  • @NishantSolanki 我认为你没有理解我的问题。你给的只是给定图像的正常调整大小。
  • @NishantSolanki 不,它与客户端无关。我很确定使用 PHP 是可能的。
  • 哦,好吧..现在我明白了...也许你需要检查一下。 使用 gd 库倾斜图像..stackoverflow.com/questions/1650358/…

标签: php image merge imagick


【解决方案1】:

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

幸运的是,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();

生成的图像非常类似于:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2011-12-21
    • 2015-02-01
    • 2013-02-19
    • 1970-01-01
    相关资源
    最近更新 更多