将imagettftext GD修改为Imagick

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将imagettftext GD修改为Imagick相关的知识,希望对你有一定的参考价值。

我们有一个文件可以为图像添加文字。

我们需要将代码从GD转换为Imagick,因为我们需要添加样式和imagettftext无法实现的其他功能。

任何人都可以转换下面的代码通过Imagick而不是使用imagettftext添加文本?

$txt = imagettfbbox($fontsize ,0,$font,$str_l1) ;
$x_img = abs($txt[2] - $txt[0]) + 15;
$y_img = abs($txt[7] - $txt[1]) ;

$im_img = imagecreate($x_img, $y_img + 4);
$bg = imagecolorallocate($im_img, 229,229,229); 
imagecolortransparent($im_img, $bg); 
imagettftext($im_img, $fontsize, 0, abs($txt[0]) , abs($txt[5]) , $textcolor, $font, $str_l1);
答案

我无法将您的命令转换为Imagick,但我可以向您展示一个简单的示例,该示例使用在Imagemagick中使用-annotate向图像添加文本的大部分功能。还有其他方法可以向图像添加文本。

看到:

https://www.imagemagick.org/Usage/text https://www.imagemagick.org/script/command-line-options.php#annotate https://www.imagemagick.org/script/command-line-options.php#gravity https://www.imagemagick.org/script/command-line-options.php#geometry

有关Imagick的等价物,请参阅http://us3.php.net/manual/en/book.imagick.php

http://us3.php.net/manual/en/imagick.annotateimage.php http://us3.php.net/manual/en/imagickdraw.setfont.php http://us3.php.net/manual/en/imagickdraw.setfontfamily.php http://us3.php.net/manual/en/imagickdraw.setfontsize.php http://us3.php.net/manual/en/imagickdraw.setfontstretch.php http://us3.php.net/manual/en/imagickdraw.setfontstyle.php http://us3.php.net/manual/en/imagickdraw.setfontweight.php http://us3.php.net/manual/en/imagickdraw.setgravity.php

输入:

enter image description here

convert lena.jpg -font ubuntu -fill skyblue -stroke blue -strokewidth 1 -undercolor white -pointsize 36 -gravity south -annotate 0x10+0+20 "TESTING" lena_annotate.jpg

-font is the font name (your can use the path to the font.suffix as well)
-fill is the color of the font
-stroke is the outline color
-strokewidth is the thickness of the stroke outline
-undercolor is the color to put under the text -- you can leave that off for no underfloor.
-gravity is where the text will be placed in the image (south means at the center of the bottom)
-geometry is the offset from the gravity position
-annotate 0x10+0+20 --- 0x10 means to slant only in y by 10 (if 10x10 it will rotate rather than slant); +0+20 means raise by 20 upwards and shift left/right by 0. If you do not want any slanting, then use 0x0. If you do not want it shifted up, then use +0+0.
"TESTING" is the text you want to use.

enter image description here

另一答案

任何人都可以转换下面的代码通过Imagick而不是使用imagettftext添加文本?

并不是的。当您遇到问题时,我们可以帮助解决问题,提供示例和/或指出正确的文档。您仍然负责移植代码以满足您的业务需求。

正如@ fmw42正确指出的那样,你的任务有很多例子。使用,您将创建一个绘图上下文来管理样式,然后将其注释为图像。

/**
 * Create a drawing context to control style.
 */
$text = new ImagickDraw();
$text->setFont('Chalkduster');
$text->setFontSize(32);
$text->setFillColor("ORANGE");
$text->setGravity(Imagick::GRAVITY_SOUTH);
/**
 * Apply to image.
 */
$image = new Imagick("wizard:");
$image->annotateImage($text, 0, 0, 0, "Hello World!");
/**
 * Save to disk.
 */
$image->writeImage('output.png');

example output

以上是关于将imagettftext GD修改为Imagick的主要内容,如果未能解决你的问题,请参考以下文章

imagettftext 中的像素字体大小而不是磅值

即使在激活 GD 库后,imagettftext() 也无法正常工作

PHP GD imagettftext 测量

Mac php使用gd库出错 Call to undefined function imagettftext()

解决php-imagettftext()因为–enable-gd-jis-conv导致乱码的另一种方法

PHP 通过 imagettftext() 为图片添加水印