[英]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: 为什么不:
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.