这是我的ImageMagick代码,通过在默认目录中创建文件名为"colored_font.png"的新图像,它在我的Web服务器上运行良好。。。
<?php
$cmd = " -background none -pointsize 60 -font Times-Roman -fill red ".
" -strokewidth 1 -stroke black label:'"google'" ";
exec("convert $cmd coloured_font.png");
?>
但现在我在Windows上运行ImageMagick,它不会在默认文件夹中创建任何图像文件,但ImageMagick应用程序运行良好(我通过创建缩略图进行了测试)。所以现在我的想法是在浏览器屏幕上显示"colored_font.png",而不将其保存在其他地方。。。因此,请任何人帮助我在屏幕上创建和显示图像而不保存它。
您可以使用特殊的inline:
格式的图像(ImageMagick也支持读取文件)。此格式是二进制数据的base64编码。
在(Linux)命令行上:
my_base64_png="$(
convert '
-background none '
-pointsize 60 '
-font Times-Roman '
-fill red '
-strokewidth 1 '
-stroke black '
label:'"google'" '
png:fd:1 '
| '
base64 -i - -o -)"
这个命令使用了ImageMagick和shell的几个特殊技巧:
- 使用格式提示CCD_ 2来告诉它输出应该是PNG格式
- 通过指定
fd:1
,使用stdout作为其输出通道(而不是文件) - 将输出直接管道传输到
base64
二进制文件的stdin中,以对PNG进行编码 - 将base64编码的数据存储在环境变量CCD_ 5中
现在,在HTML中内联base64图像数据(它应该在所有现代浏览器中都能工作,但在旧浏览器中不起作用):
<IMG SRC="data:image/png;base64,
echo "$(my_base64_png)"
ALT="google" WIDTH=214 HEIGHT=57 VSPACE=5 HSPACE=5 BORDER=0 />
或
<IMG SRC="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAM4AAABJAQMAAABPZIvnAAAABGdBTUEAALGPC/xh
BQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA
OpgAABdwnLpRPAAAAAZQTFRFAAAA/wAAG/+NIgAAAAF0Uk5TAEDm2GYAAAABYktH
RACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAB6ElEQVQ4y+3UQY7bIBQG4IeQ
yqYaLhANV+iyi9FwpS69iGyiLuZYpepF6A1YskC8/uCA7SgZtVI3lcoiivkIxu/9
MdH/8U+N6el2pk0oFyibWyr1Q3+PlO2NqJV+/BnRPMjcJ9zrfJ/U+zQ9oAvo+QGF
d+npPqFQn++TXElkrEpEJhAtlTBR6dNHUuzIMhFnEhxAmJDkKxlmt7ATXDDJYcaE
r4Txqtkl42VYSH+t9KrD9b5nxZeog/LWGVHprGInGWVQUTvjDWXca5KdsowqyGSc
DrZRlGlQUl4kQwpUjiSS9gI9VdECZhHFQ2I+UE2CHJQfkNxTNKCl0RkURqlLowJK
1h1p3sjc0CJD39D4BIqD7JvvpH/GAxl2/YSq9mtHSHknga7OKNOHKyEdaFC2Dh1w
9VSJemBeGuHgMuh24EynK03YM1Lr83OjUle38aVSfTblT424rl4LhdglsUag5RB5
uBJSJBIiELSzaAeIN0pUlEeZEMeClC4cBuH6mxOlgPjC3uLproUCWfy58WPN/MZR
86ghc888yNdD0Tj8eAucasl2I5LqX19I7EmEjaYjSb9R/G1SYfQA7ZBuT5H6WwDt
UAfK1BOJmh/eZnKLeKvZ/vA8qonCpj1h6djfbqvW620Tva36++MXUkNDlFREMVkA
AAAldEVYdGRhdGU6Y3JlYXRlADIwMTItMDgtMjJUMDg6Mzc6NDUrMDI6MDBTUnmt
AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEyLTA4LTIyVDA4OjM3OjQ1KzAyOjAwIg/B
EQAAAA50RVh0bGFiZWwAImdvb2dsZSJdcbX4AAAAAElFTkSuQmCC"
ALT="google" WIDTH=214 HEIGHT=57 VSPACE=5 HSPACE=5 BORDER=0 />
将这个过程翻译成PHP应该不难
正如我所说,ImageMagick可以读取这种inline:
格式(此处不用于读取)。但为了完整起见,让我向您展示如何:
convert '
'inline:image/png;data:,
iVBORw0KGgoAAAANSUhEUgAAAM4AAABJAQMAAABPZIvnAAAABGdBTUEAALGPC/xh
BQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA
OpgAABdwnLpRPAAAAAZQTFRFAAAA/wAAG/+NIgAAAAF0Uk5TAEDm2GYAAAABYktH
RACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAB6ElEQVQ4y+3UQY7bIBQG4IeQ
yqYaLhANV+iyi9FwpS69iGyiLuZYpepF6A1YskC8/uCA7SgZtVI3lcoiivkIxu/9
MdH/8U+N6el2pk0oFyibWyr1Q3+PlO2NqJV+/BnRPMjcJ9zrfJ/U+zQ9oAvo+QGF
d+npPqFQn++TXElkrEpEJhAtlTBR6dNHUuzIMhFnEhxAmJDkKxlmt7ATXDDJYcaE
r4Txqtkl42VYSH+t9KrD9b5nxZeog/LWGVHprGInGWVQUTvjDWXca5KdsowqyGSc
DrZRlGlQUl4kQwpUjiSS9gI9VdECZhHFQ2I+UE2CHJQfkNxTNKCl0RkURqlLowJK
1h1p3sjc0CJD39D4BIqD7JvvpH/GAxl2/YSq9mtHSHknga7OKNOHKyEdaFC2Dh1w
9VSJemBeGuHgMuh24EynK03YM1Lr83OjUle38aVSfTblT424rl4LhdglsUag5RB5
uBJSJBIiELSzaAeIN0pUlEeZEMeClC4cBuH6mxOlgPjC3uLproUCWfy58WPN/MZR
86ghc888yNdD0Tj8eAucasl2I5LqX19I7EmEjaYjSb9R/G1SYfQA7ZBuT5H6WwDt
UAfK1BOJmh/eZnKLeKvZ/vA8qonCpj1h6djfbqvW620Tva36++MXUkNDlFREMVkA
AAAldEVYdGRhdGU6Y3JlYXRlADIwMTItMDgtMjJUMDg6Mzc6NDUrMDI6MDBTUnmt
AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEyLTA4LTIyVDA4OjM3OjQ1KzAyOjAwIg/B
EQAAAA50RVh0bGFiZWwAImdvb2dsZSJdcbX4AAAAAElFTkSuQmCC' '
my_decoded.png
ImageMagick不需要命令的image/png;
部分(它甚至忽略了它),因为它可以通过自己的内置魔术数据库来识别格式,但这也没有坏处。。。
我还要指出,ImageMagick的命令行长度限制为5000个字符,因此读取inline:
数据对较大的图片无效。(我现在不知道在HTML中内联图像数据的限制是什么…)
只需在html文件中将coloured_font.png
替换为coloured_font.php
并创建
coloured_font.php
,内容如下:
<?php
header("Content-Type: image/png");
echo `convert -background none -pointsize 60 -font Times-Roman -fill red ".
" -strokewidth 1 -stroke black label:'"google'" png:-`;
就这样!尝试在浏览器中打开coloured_font.php
!
您必须创建一个临时文件
步骤
- 通过在shell中运行
imagemagick
命令创建一个临时文件temp_image.jpg
-
将其作为http响应发送
$file = 'pathto/temp_image.jpg'; $type = 'image/jpeg'; // set appropriate type header('Content-Type:'.$type); // set content type header('Content-Length: ' . filesize($file)); readfile($file);
-
删除
temp_image.jpg
假设这是在getImage.php
中,它可以作为图像标签的来源
<img src="pathto/getImage.php" />