当我将RGB彩色图像转换为pdf时,我可以画一个正方形,但是当我使用CMYK图像时,它不起作用。
下面是我的代码:
$folderName = "storagenew.pdf");
$safeArea = new ImagickDraw();
$safeArea->setStrokeWidth(2);
if ($metaData['colourMode'] == 'CMYK') {
$colorSpace = imagick::COLORSPACE_CMYK;
$color = "cmyk(0,100,100,0)";
} else {
$colorSpace = imagick::COLORSPACE_RGB;
$color = "rgb(255,0,0)";
}
$safeArea->setStrokeColor($color);
$safeArea->setFillColor($color);
$safeArea->setStrokeOpacity(1);
$safeArea->setFillOpacity(1);
$safeArea->line(3, 4, $metaData['px_width'] - 4, 3);
$safeArea->line(3, $metaData['px_height'] - 4, $metaData['px_width'] - 4, $metaData['px_height'] - 3);
$safeArea->line(3, 4, 4, $metaData['px_height'] - 3);
$safeArea->line($metaData['px_width'] - 3, 4, $metaData['px_width'] - 4, $metaData['px_height'] - 3);
$pdf = new Imagick($path);
$pdf->setImageResolution($metaData['dpi'], $metaData['dpi']);
$pdf->transformImageColorspace($colorSpace);
$pdf->setImageFormat('pdf');
$pdf->drawImage($safeArea);
$pdf->writeImage(storage_path($folderName));
$metaData是包含图像所有信息的数组,$path是图像的路径。
提前致谢
这是我
的最终解决方案:
$width = $metaData['orientation'] == 'Landscape' ? $product->bleed_width : (integer) $product->bleed_height;
$height = $metaData['orientation'] == 'Landscape' ? (integer) $product->bleed_height : $product->bleed_width;
$canvasHeight = $this->convertMmToPx($height, $metaData['dpi']);
$canvasWidth = $this->convertMmToPx($width, $metaData['dpi']);
$canvas = new Imagick();
$canvas->newImage($canvasWidth, $canvasHeight, new ImagickPixel('none'));
$canvas->setImageResolution($metaData['dpi'], $metaData['dpi']);
$canvas->transformimagecolorspace(imagick::COLORSPACE_CMYK);
//create png
$png = new Imagick();
$png->newImage($canvasWidth - $this->convertMmToPx(6.1, $metaData['dpi']), $canvasHeight - $this->convertMmToPx(6.1, $metaData['dpi']), new ImagickPixel('none'));
$borderWidth = $this->convertMmToPx(0.1, $metaData['dpi']);
$borderColor = 'rgba(255, 0, 0, 1)';
$imageWidth = $png->getImageWidth();
$imageHeight = $png->getImageHeight();
$border = new ImagickDraw();
$border->setFillColor('none');
$border->setStrokeColor(new ImagickPixel($borderColor));
$border->setStrokeWidth($borderWidth);
$border->setStrokeAntialias(false);
$border->rectangle(
0, 0, $imageWidth - $this->convertMmToPx(0.1, $metaData['dpi']), $imageHeight - $this->convertMmToPx(0.1, $metaData['dpi'])
);
$png->drawImage($border);
$png->setImageFormat('png');
$png->setImageResolution($metaData['dpi'], $metaData['dpi']);
$png->transformimagecolorspace(imagick::COLORSPACE_CMYK);
$canvas->compositeImage(
$png, Imagick::COMPOSITE_DEFAULT, (($canvasWidth - $png->getImageWidth()) / 2), (($canvasHeight - $png->getImageHeight()) / 2)
);
$canvas->setImageCompressionQuality(100);
$canvas->setImageFormat('pdf');
$canvas->transformimagecolorspace(imagick::COLORSPACE_CMYK);
$canvas->writeImage($filePath);