简体   繁体   English

可以使用GD和PHP为透明图像添加背景颜色

[英]Possible to add background color to transparent image using GD and PHP

I have the thumbnail creation class written with php language using GD. 我有使用GD用php语言编写的缩略图创建类。 I want to know is when i upload the transparent image which is png or gif, can i be able to put background in that thumbnail image ? 我想知道当我上传png或gif的透明图像时,我能将背景放在缩略图中吗? If that's possible, please kindly guide me how. 如果可能的话,请指导我如何。 Thanks. 谢谢。

Here's a working solution for PNG files: 这是PNG文件的工作解决方案:

$filePath = '';  //full path to your png, including filename and extension
$savePath = '';  //full path to saved png, including filename and extension
$colorRgb = array('red' => 255, 'green' => 0, 'blue' => 0);  //background color

$img = @imagecreatefrompng($filePath);
$width  = imagesx($img);
$height = imagesy($img);

//create new image and fill with background color
$backgroundImg = @imagecreatetruecolor($width, $height);
$color = imagecolorallocate($backgroundImg, $colorRgb['red'], $colorRgb['green'], $colorRgb['blue']);
imagefill($backgroundImg, 0, 0, $color);

//copy original image to background
imagecopy($backgroundImg, $img, 0, 0, 0, 0, $width, $height);

//save as png
imagepng($backgroundImg, $savePath, 0);

Why not: 为什么不:

  1. Create an image with the desired background 创建具有所需背景的图像
  2. Paint the transparent image above it 在其上方绘制透明图像
  3. Save the new image over the transparent one. 将新图像保存在透明图像上。

Very simple code with dynamic background color. 非常简单的代码与动态背景颜色。

<?php
    function hex2RGB($hexStr, $returnAsString = false, $seperator = ',') {
        $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
        $rgbArray = array();
        if (strlen($hexStr) == 6) { //If a proper hex code, convert using bitwise operation. No overhead... faster
            $colorVal = hexdec($hexStr);
            $rgbArray['red'] = 0xFF & ($colorVal >> 0x10);
            $rgbArray['green'] = 0xFF & ($colorVal >> 0x8);
            $rgbArray['blue'] = 0xFF & $colorVal;
        } elseif (strlen($hexStr) == 3) { //if shorthand notation, need some string manipulations
            $rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
            $rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
            $rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
        } else {
            return false; //Invalid hex color code
        }
        return $returnAsString ? implode($seperator, $rgbArray) : $rgbArray;die;
    }
    $color_code = hex2RGB('#fff000');

    $imgName = uniqid();
    $filePath = 'old-img/clothing_type_test.png';  //full path to your png, including filename and extension
    $savePath = 'new-img/'.$imgName.'.png';  //full path to saved png, including filename and extension
    $colorRgb = array('red' => $color_code['red'], 'green' => $color_code['green'], 'blue' => $color_code['blue']);  //background color

    $img = @imagecreatefrompng($filePath);
    $width  = imagesx($img);
    $height = imagesy($img);

    $backgroundImg = @imagecreatetruecolor($width, $height);
    $color = imagecolorallocate($backgroundImg, $colorRgb['red'], $colorRgb['green'], $colorRgb['blue']);
    imagefill($backgroundImg, 0, 0, $color);
    imagecopy($backgroundImg, $img, 0, 0, 0, 0, $width, $height);
    imagepng($backgroundImg, $savePath, 0);
?>
<p align="center"><img align="absmiddle" src="<?php echo $savePath;?>" /></p>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM