将 CMYK 图像转换为 PDF 时无法绘制正方形



当我将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);

最新更新