具有透明度的CMY的Illustrator或PDF文件具有白色背景

时间:2016-06-08 09:25:27

标签: php ghostscript imagick

将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();

CMYK转换为PNG示例: CMYK conversion to PNG example:

RGB转换为PNG示例: RGB conversion to PNG example:

更新: 终于得到了代码在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();

0 个答案:

没有答案