2010-05-08 53 views
2

该代码使用GD生成两个图像并旋转其中一个。当我旋转图像黑色边框开始出现。任何人都有如何解决这个问题的想法?为什么当我旋转图像黑色边框出现? PHP GD

<?php 
$im = imagecreatetruecolor(300, 400); 
$white = imagecolorallocate($im, 255, 255, 255); 
$black = imagecolorallocate($im, 000, 000, 000); 
$black1 = imagecolorallocate($im, 001, 001, 001); 
$grey = imagecolorallocate($im, 230, 230, 230); 
$font_file = './arial.ttf'; 
$rotate=45; 

imagefilledrectangle($im, 0, 0, 300, 400, $black); 
imagefilledrectangle($im, 1, 1, 298, 398, $grey); 
imagefilledrectangle($im, 49, 69, 251, 271, $black); 
imagefilledrectangle($im, 50, 70, 250, 270, $white); 
imagefttext($im, 13, 0, 90, 30, $black, $font_file, "Wind Direcction"); 

$source=imagecreatetruecolor(100, 100); 
imagefilledrectangle($source, 0, 0, 100, 100, $white); 
$values = array(
      20, 30, // Point 1 (x, y) 
    50, 0, 
      80, 30, 
    65, 30, 
    65, 100, 
    35, 100, 
    35, 30 // Point 7 (x, y) 
      ); 
imagefilledpolygon($source, $values, 7, $black1); 
$asd=imagerotate($source, $rotate, 0); 
imagecolortransparent($asd, $black); 
imageantialias($asd, true); 
$insert_x = imagesx($asd); 
$insert_y = imagesy($asd); 

if($rotate==0 || $rotate==90 || $rotate==180 || $rotate==270){ 
imagecopymerge ($im , $asd , 100 , 130 , 0 , 0 , $insert_x , $insert_y , 100); 
} 
if($rotate==45 || $rotate==135 || $rotate==225 || $rotate==315){ 
imagecopymerge ($im , $asd , 85 , 110 , 0 , 0 , $insert_x , $insert_y , 100); 
} 

imageantialias($im, true); 
header('Content-Type: image/png'); 
imagepng($im); 
imagedestroy($im); 
?> 

回答

1

貌似图片的默认颜色为白色:

$source=imagecreatetruecolor(100, 100); 
imagefilledrectangle($source, 0, 0, 100, 100, $white); 

而且你的透明度是黑色的:

imagecolortransparent($asd, $black); 

尝试使透明白色。

+0

你的解决方案很聪明,但它的作用是部分的,对我来说......边界仍然可见,但对比度较低...... – MarcoS 2015-03-20 14:45:36