PHP合并图像(白色=透明度)

时间:2014-07-02 11:29:23

标签: php merge transparency

如果图像颜色为白色,如何合并图像获得透明度状态白色?

我遇到这种情况:

http://i31.tinypic.com/2rz5pxc.png

我需要这个结果:

enter image description here

2 个答案:

答案 0 :(得分:2)

这不是最好的结果,因为我不知道更好的方法来实现这一目标。这是我的结果:

Result Image

这是PHP:

<?php

/** Set source image location **/
$baseImageSource    = 'http://q/stock-photos/tux.png';
$overlayImageSource = 'http://q/stock-photos/firefox-logo-small.jpg';

/** Overlay image configuration **/
// Set this value between 0 and 100. 10 will doing great
$fuzz = 10;

// Set position of overlay image, from top and left;
$overlayTop  = 240;
$overlayLeft = 200;


/** Core program **/

// Create Imagick object for source image
$overlayImage = new Imagick( $overlayImageSource );
$finalImage = new Imagick( $baseImageSource );

// Remove overlay image background
$overlayImage->paintTransparentImage(
    $overlayImage->getImagePixelColor( 0, 0 ),
    0, round( $fuzz * 655.35 )
);

// Set image overlay format
$overlayImage->setImageFormat('png');

// Put overlay image to base image
$finalImage->compositeImage(
    $overlayImage, Imagick::COMPOSITE_DEFAULT,
    $overlayLeft,
    $overlayTop
);

// Set output image format
$finalImage->setImageFormat('png');

// Prepare image and publish!
header('Content-type: image/png');
echo $finalImage;

基本上这只是对this answer(实现图像合并)和this answer(实现背景删除)的修改。用于删除背景的方法是Imagick::paintTransparentImage()Imagick::getImagePixelColor()用于检测背景颜色。然后我们只需将两个图像合并到Imagick::compositeImage()

但是,这个结果还远非完美,特别是如果你将它与GIMP或Photoshop等图像处理应用程序进行比较。但是你应该试一试。希望它有所帮助:)

答案 1 :(得分:1)

你需要使用像Gimp这样的程序,添加透明层,从firefox图像中删除白色,并保存为PNG。