将CMYK Illustrator AI或PDF转换为PNG时,透明度将以白色背景呈现。将RGB AI或PDF转换为PNG时,透明度仍保留在渲染的PNG中。我已尝试实施此处显示的结果:Convert PDF (with transparency *and* CMYK) to jpg但没有成功。 SVG和PSD文件在从RGB或CYMK渲染到PNG的透明度方面没有问题。
我们的服务器安装了Ghostscript 9.07。
$f = $_FILES['imageLoader']['name'];
$im = new Imagick();
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImage("upload/$t/$f");
$width = $im->getImageWidth();
if (pathinfo($f, PATHINFO_EXTENSION) == 'psd') {
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
}
if (pathinfo($f, PATHINFO_EXTENSION) == 'svg') {
$im->setBackgroundColor(new ImagickPixel('transparent'));
$svg = file_get_contents("upload/$t/$f");
$im->readImageBlob($svg);
}
if (pathinfo($f, PATHINFO_EXTENSION) == 'ai') {
$im->transformImageColorspace(Imagick::COLORSPACE_SRGB);
}
if (pathinfo($f, PATHINFO_EXTENSION) == 'pdf') {
$im->transformImageColorspace(Imagick::COLORSPACE_SRGB);
}
$im->thumbnailImage(149, 240, true);
$im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$im->setImageResolution(72,72);
$im->resampleImage(72,72,imagick::FILTER_UNDEFINED,0);
$im->setImageFormat('png32');
$im->writeImage($outFile);
// clean up
$im->clear();
$im->destroy();
更新: 终于得到了代码在ImageMagick论坛的好人帮助下工作。看来问题是在读取图像之前设置颜色空间。此代码现在适用于我。
$im = new Imagick();
$im->setColorspace(Imagick::COLORSPACE_SRGB);
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImage("upload/$t/$f");
$width = $im->getImageWidth();
if (pathinfo($f, PATHINFO_EXTENSION) == 'psd' ) {
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
}
if (pathinfo($f, PATHINFO_EXTENSION) == 'svg' ) {
$im->setBackgroundColor(new ImagickPixel('transparent'));
$svg = file_get_contents("upload/$t/$f");
$im->readImageBlob($svg);
}
$im->thumbnailImage(149, 240, true);
$im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$im->setImageResolution(72,72);
$im->resampleImage(72,72,imagick::FILTER_UNDEFINED,0);
$im->setImageFormat('png32');
$im->writeImage($outFile);
// cleanup
$im->clear();
$im->destroy();