生成与ImageMagick的图像不保存到文件,但仍然在网站上显示出来(Generate image

2019-06-27 06:02发布

这是我的ImageMagick的代码,通过在默认目录下的文件名“coloured_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的应用程序运行正常(我已经通过创建缩略图测试)。 所以,现在我的想法是,以显示在浏览器屏幕“coloured_font.png”,但不保存任何地方......所以请谁能帮助我创建和显示图像在屏幕上,而不保存它。

Answer 1:

您可以使用特殊的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和外壳都在他们的袖子:

  • 使用格式提示png:告诉它输出应为PNG格式;
  • 使用标准输出作为其输出信道由specifiying(而不是一个文件) fd:1 ;
  • 管道输出直接进入的标准输入 base64二进制来编码PNG;
  • 存储在所述环境变量的编码数据以base64 my_base64_png

现在,在你的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内嵌图像数据的限制是...)



Answer 2:

只需更换coloured_font.pngcoloured_font.php在你的HTML文件,并创建

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在你的浏览器!



Answer 3:

你将不得不创建一个临时文件

脚步

  1. 创建一个临时文件, temp_image.jpg运行imagemagick在shell命令
  2. 发送的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); 
  3. 删除temp_image.jpg

假设这是在getImage.php ,它可作为一个图像标记的源

<img src="pathto/getImage.php" />


文章来源: Generate images with ImageMagick without saving to file but still display them on website