PHP & JS - Jcrop - 选择的 PNG 图像有黑色背景
PHP & JS - Jcrop - chosen PNG image has black background
当我在 Jcrop 容器中选择具有透明背景的 PNG 文件时,它显示为黑色背景。当我裁剪并保存它时,它被保存为 .png
文件,但背景为黑色,因为它显示在裁剪容器中。
JS:
$('#image').Jcrop({
bgColor: 'transparent',
aspectRatio: 1,
minSize: [180, 180],
maxSize: [20000, 20000],
onSelect: updateCoords,
onChange: updateCoords,
boxWidth: $('.modal-body', $imageUploadModal).width()
});
PHP 保存图片:
$target_w = $target_h = 400;
$src = $request->request->get('src');
$x = $request->request->get('x');
$y = $request->request->get('y');
$w = $request->request->get('w');
$h = $request->request->get('h');
ini_set('memory_limit', -1);
$img_r = imagecreatefrompng($src);
imagealphablending($img_r, true);
$dst_r = ImageCreateTrueColor($target_w, $target_h);
imagecopyresampled($dst_r, $img_r, 0, 0, $x, $y, $target_w, $target_h, $w, $h);
$randomStringGenerator = new RandomStringGenerator();
$filename = '/profile-pictures/'.$randomStringGenerator->generate(50).'.png';
imagepng($dst_r, $filename);
imagedestroy($img_r);
imagedestroy($dst_r);
ini_restore('memory_limit');
有什么我可能遗漏的想法吗? bgColor
正如我在多个答案中看到的那样,解决方案没有任何效果,也没有解决问题。
可能是因为imagecreatetruecolor
手册页上第一个用户贡献的注释中给出的引用示例:
If you want to create a transparent PNG image, where the background
is fully transparent, and all draw operations happen on-top of this,
then do the following:
"Richard Davey"
<?php
$png = imagecreatetruecolor(800, 600);
imagesavealpha($png, true);
$trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
imagefill($png, 0, 0, $trans_colour);
$red = imagecolorallocate($png, 255, 0, 0);
imagefilledellipse($png, 400, 300, 400, 300, $red);
header("Content-type: image/png");
imagepng($png);
?>
意思是当您创建 "host" 图像以将裁剪后的图像复制到其中时,您说它具有透明背景
当我在 Jcrop 容器中选择具有透明背景的 PNG 文件时,它显示为黑色背景。当我裁剪并保存它时,它被保存为 .png
文件,但背景为黑色,因为它显示在裁剪容器中。
JS:
$('#image').Jcrop({
bgColor: 'transparent',
aspectRatio: 1,
minSize: [180, 180],
maxSize: [20000, 20000],
onSelect: updateCoords,
onChange: updateCoords,
boxWidth: $('.modal-body', $imageUploadModal).width()
});
PHP 保存图片:
$target_w = $target_h = 400;
$src = $request->request->get('src');
$x = $request->request->get('x');
$y = $request->request->get('y');
$w = $request->request->get('w');
$h = $request->request->get('h');
ini_set('memory_limit', -1);
$img_r = imagecreatefrompng($src);
imagealphablending($img_r, true);
$dst_r = ImageCreateTrueColor($target_w, $target_h);
imagecopyresampled($dst_r, $img_r, 0, 0, $x, $y, $target_w, $target_h, $w, $h);
$randomStringGenerator = new RandomStringGenerator();
$filename = '/profile-pictures/'.$randomStringGenerator->generate(50).'.png';
imagepng($dst_r, $filename);
imagedestroy($img_r);
imagedestroy($dst_r);
ini_restore('memory_limit');
有什么我可能遗漏的想法吗? bgColor
正如我在多个答案中看到的那样,解决方案没有任何效果,也没有解决问题。
可能是因为imagecreatetruecolor
手册页上第一个用户贡献的注释中给出的引用示例:
If you want to create a transparent PNG image, where the background is fully transparent, and all draw operations happen on-top of this, then do the following:
"Richard Davey"
<?php
$png = imagecreatetruecolor(800, 600);
imagesavealpha($png, true);
$trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
imagefill($png, 0, 0, $trans_colour);
$red = imagecolorallocate($png, 255, 0, 0);
imagefilledellipse($png, 400, 300, 400, 300, $red);
header("Content-type: image/png");
imagepng($png);
?>
意思是当您创建 "host" 图像以将裁剪后的图像复制到其中时,您说它具有透明背景