Я могу нарисовать квадрат, когда я конвертирую цветное изображение RGB в pdf, но он не работает, когда я делаю это с изображением CMYK.
Ниже мой код:
$folderName = "storage\new.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);
Других решений пока нет …