我们得到一个包含黑色线条的jpg。我们裁剪它,旋转它,使白色透明,然后最后调整到标准宽度。
在我调整大小之前,图像(在$ src中)正是我希望它在正确的位置具有透明度。重新采样后,图像($ out)返回到白色背景。 (注释掉的行是我尝试的一些内容。)在我找到an answer to a similar problem,之前,我没有改变alpha混合和alpha保存的设置,并且至少有一些非常嘈杂的透明度。
如何获取重新采样的图像以将白色更改为透明?
编辑:在$ out中,我看到大多数像素是255,255,255。有些是252,252,252。有些是245,245,245。这是唯一的3个值我见过$ out。我不明白为什么这会是$ out的情况,而不是$ src。
<?php
$imgname = "../assets/Sample.jpg";
$src = imagecreatefromjpeg($imgname);
$src = imagecropauto($src, IMG_CROP_WHITE);
$white = imagecolorallocate($src, 255, 255, 255);
imagecolortransparent($src, $white);
$src = imagerotate($src, -90, 0);
// Resample
$width = imagesx($src);
$height = imagesy($src);
$percent = 270/$width;
$new_width = $width * $percent;
$new_height = $height * $percent;
$out = imagecreatetruecolor($new_width, $new_height);
//imagefill($out, 0,0, imagecolorallocate($out, 255, 255, 255));
imagealphablending( $out, false );
imagesavealpha( $out, true );
imagecopyresampled($out, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
$white2 = imagecolorallocate($out, 255, 255, 255);
imagecolortransparent($out, $white2);
header("Content-type: image/png");
// imagepng($src);
imagepng($out);
?>
答案 0 :(得分:0)
JPEG绘图的问题在于压缩过程稍微改变了值。这在照片中通常不明显,但在图纸中显示。
如果您知道所有内容都是黑色或写入,则应将接近黑色的像素转换为黑色,将接近白色的像素转换为白色。