admin管理员组文章数量:1123883
wrong colors, these become e.g. high contrast green. tried to use ghostscript to attach the colors, but then it leads to wrong canvas dimension.
// Function to generate thumbnail from EPS using Imagick
// this code works fine but generates wrong colors
function generateThumbnailFromEps($epsFile, $outputPath) {
try {
$imagick = new Imagick();
// Set the resolution before reading the EPS file
$imagick->setResolution(300, 300);
// Read the EPS file
$imagick->readImage($epsFile);
// Flatten image to remove transparency and set background to white
$imagick->setImageBackgroundColor('white');
$imagick = $imagick->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
// Ensure colorspace is RGB to fix color issues
$imagick->transformImageColorspace(Imagick::COLORSPACE_RGB);
// Resize the image while maintaining the aspect ratio
$originalWidth = $imagick->getImageWidth();
$originalHeight = $imagick->getImageHeight();
$newWidth = 1280;
$newHeight = ($newWidth / $originalWidth) * $originalHeight;
$imagick->resizeImage($newWidth, $newHeight, Imagick::FILTER_LANCZOS, 1);
// Create a canvas with the same size as the resized image (no extra padding)
$canvas = new Imagick();
$canvas->newImage($newWidth, $newHeight, new ImagickPixel('white'));
// Composite the resized image directly onto the canvas
$canvas->compositeImage(
$imagick,
Imagick::COMPOSITE_OVER,
0, 0 // Place image at the top-left corner (no padding)
);
// Set image format and save the output
$canvas->setImageCompression(Imagick::COMPRESSION_JPEG);
$canvas->setImageCompressionQuality(96);
if ($canvas->getImageColorspace() !== Imagick::COLORSPACE_SRGB) {
// Convert to sRGB color space
$canvas->transformImageColorspace(Imagick::COLORSPACE_SRGB);
}
$canvas->setImageFormat('jpg');
$canvas->writeImage($outputPath);
// Clean up resources
$imagick->clear();
$canvas->clear();
$imagick->destroy();
$canvas->destroy();
// echo "Generated thumbnail: $outputPath\n";
} catch (Exception $e) {
// echo "Failed to generate thumbnail from EPS: " . $e->getMessage() . "\n";
}
}
i tried it with ghostscript and imagick alone only. i have to use a canvas because some eps delivered are a mess and the reolution(s) are always different too.
// Step 1: Use Ghostscript to convert the EPS to a color-corrected PNG (RGB color profile)
// this code if set first, sets the correct colors but mess up the image dimension and generated white-space on top and right
$tempFile = sys_get_temp_dir() . '/' . uniqid('temp_image_', true) . '.png';
// Ghostscript command to convert EPS to PNG and apply color profile correction (RGB)
$gsCommand = "gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m "
. "-dColorConversionStrategy=/sRGB -dOverrideICC "
. "-sOutputFile=" . escapeshellarg($tempFile) . " "
. "-r300 " . escapeshellarg($epsFile);
// Execute Ghostscript command
exec($gsCommand, $output, $returnCode);`
本文标签: imagick wrong color profile for eps to jpgStack Overflow
版权声明:本文标题:imagick wrong color profile for eps to jpg - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736605096a1945306.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论