首页 > 解决方案 > 如何通过 PHP 为 Imagick 标题的文本和背景着色

问题描述

我正在尝试转换这个 Imagick shell 命令:

convert -geometry 200x -quiet -background "#0003" -fill "#ffff" -size 200x35 -gravity center caption:"12:50" image-20171214165000.JPG +swap -gravity north -composite image-20171214165000-thumb.JPG 2>&1

使用 PHP Imagick 插件,但我在标题填充颜色方面遇到问题。

上面的 shell 命令产生这个(预期的)输出:

在此处输入图像描述

然而,我目前的 PHP 方法:

<?php

$time = "12:50";
$img = new \Imagick();
$img->readImage('image-20171214165000.JPG');
$img->setImageCompression(\Imagick::COMPRESSION_JPEG);

$imageprops = $img->getImageGeometry();
$width = $imageprops['width'];
$height = $imageprops['height'];
$img = $img->transformImage($width . "x" . $height, "200x");

$capt = new \Imagick();
$capt->setBackgroundColor("rgba(0, 0, 0, 0.3)");
$capt->setGravity(\Imagick::GRAVITY_CENTER);
$capt->newPseudoImage(200, 35, "Caption:" . $time);
// $opacityColor = new \ImagickPixel("rgba(255, 255, 255, 1)");
// $capt->colorizeImage("rgba(255, 255, 255, 1)", $opacityColor);

$img->setGravity(\Imagick::GRAVITY_NORTH);
$img->compositeImage($capt, \Imagick::COMPOSITE_OVER, 0, 0);
$capt->destroy();

$img->stripImage();
$img->writeImage('image-20171214165000-thumb.JPG');
$img->destroy();

?>

产生带有黑色文本的输出:

在此处输入图像描述

使用注释掉的colorizeImage()功能时,文本(“12:50”)会生成白色,但这也会使标题的背景变白(这是不需要的)。

如何设置标题背景 ( rgba(0, 0, 0, 0.3)) 和标题文本 ( rgba(255, 255, 255, 1)) 的颜色而不相互影响?

标签: phpimagick

解决方案


Approach (based on https://stackoverflow.com/a/10760237/451962) that satisfies my criteria is the following:

<?php

$time = "12:50";
$img = new \Imagick();
$img->readImage('image-20171214165000.JPG');
$img->setImageCompression(\Imagick::COMPRESSION_JPEG);

$imageprops = $img->getImageGeometry();
$width = $imageprops['width'];
$height = $imageprops['height'];
$img = $img->transformImage($width . "x" . $height, "200x");

$capt = new \Imagick();
$draw = new \ImagickDraw();
$draw->setFontSize(32);
$fillcolor = new \ImagickPixel("white");
$draw->setFillColor($fillcolor);
$draw->setGravity(\Imagick::GRAVITY_CENTER);
$bgcolor = new \ImagickPixel("rgba(0, 0, 0, 0.2)");
$capt->newImage('200', '35', $bgcolor);
$capt->annotateImage($draw, 0, 0, 0, $time);

$img->setGravity(\Imagick::GRAVITY_NORTH);
$img->compositeImage($capt, \Imagick::COMPOSITE_OVER, 0, 0);
$img->writeImage('image-20171214165000-thumb.JPG');

?>

推荐阅读