Php 旋转Base64图像字符串而不保存图像

Php 旋转Base64图像字符串而不保存图像,php,png,base64,Php,Png,Base64,我从FedExShipping API得到一个响应,其中包括一个PNG base64图像,但是图像是垂直的。我想将此图像旋转90度,而不将其保存到磁盘,并将其显示在浏览器中以便进一步打印 我尝试先解码字符串,然后使用 $rotate_image = imagerotate($image, 90, 0); echo "<img src=\"data:image/PNG;base64,".$image."\" alt=\"Label\" />"; 也许是这样的。创建一个文件来输出图像

我从FedExShipping API得到一个响应,其中包括一个PNG base64图像,但是图像是垂直的。我想将此图像旋转90度,而不将其保存到磁盘,并将其显示在浏览器中以便进一步打印

我尝试先解码字符串,然后使用

$rotate_image = imagerotate($image, 90, 0);
echo "<img src=\"data:image/PNG;base64,".$image."\" alt=\"Label\" />";

也许是这样的。创建一个文件来输出图像

<?php // image.php

header('Content-type: image/png');

// get $image string from API or wherever you've stored it

$res = imagecreatefromstring($image);

if ($res === false) exit;

$rotated = imagerotate($res, 90, 0);
imagedestroy($res);


imagepng($rotated);
imagedestroy($rotated);
exit;

您的服务器上是否安装了Imagick?如果是这样的话,下面的方法应该有效

<img src="image.php">

借助css3
transform
属性,您还可以在浏览器中进行旋转:

$imagick = new Imagick(); 
$imagick->readImage($file);
$imagick->rotateImage(new ImagickPixel(),90);
header('Content-type: image/jpg'); //or whatever the image file is, set headers...
echo $imagick;
$imagick->clear(); 
$imagick->destroy();

请参阅对该属性的支持,基本上是所有浏览器和IE9以后的版本。

我最终只是保存了图像,旋转图像,在浏览器中显示图像,然后将其删除

#yourimage {
   transform: rotate(90deg);
   -ms-transform: rotate(90deg);
   -moz-transform: rotate(90deg);
   -webkit-transform: rotate(90deg);
}

谢谢大家

问题在于,
imagepng()
要么将生成的PNG发送到文件,要么将其发送到浏览器。没有将其存储在变量中的选项。因此,要在不保存文件的情况下执行所需操作,您需要让PHP脚本动态生成图像,可能是从base64编码的
GET
变量生成的

考虑两个脚本,让我们称它们为
wrap.php
rotate.php

wrap.php可能看起来像这样:

$label = imagecreatefromstring(base64_decode($image));

$rotated_imaged = imagerotate($label, 90, 0);
imagepng($rotated_imaged, '/var/www/vhosts/website.com/httpdocs/labels/fedex-test.png');
unlink('/var/www/vhosts/website.com/httpdocs/labels/fedex-test.png');

rotate.php

<?php

  // Pixel Art from Star Wars http://www.pixeljoint.com/pixelart/1423.htm
  $image = "iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAMAAACwUBm+AAAAAXNSR0IArs4c6QAAAKtQTFRFsAAAvbWSLUUrLEQqY1s8UYJMqJ1vNTEgOiIdIzYhjIFVLhsXZ6lgSEIsP2U8JhcCVzMsSXZEgXdOO145XJdWOl03LzAYMk4vSXNExr+hwcuxRTs1Qmk+RW9Am49eFRANQz4pUoNMQWc+OSMDTz0wLBsCNVMxa2NBOyUDUoNNSnlEWo9VRGxAVzYFl6tXCggHbLNmMUIcHhwTXkk5f3VNRT8wUT8xAAAACQocRBWFFwAAAAF0Uk5TAEDm2GYAAAPCSURBVHja7d3JctNAFIZRMwRCCGEmzPM8z/D+T8bu/ptbXXJFdij5fMt2Wuo+2UgqxVmtttq5WVotLzBgwIABAwYMGDCn0qVqbo69psPqVpWx+1XG5iaavF8wYMCAAQMGDBgwi4DJ6Y6qkxB1HNlcN3a92gbR5P2CAQMGDBgwYMCAWSxMlrU+UY5yu2l9okfV4bAxUVbf7TJnAwMGDBgwYMCAAbMLMHeqbGR82Zy+VR1Ht81nVca6R+UdTLaU24Ruzd3qM/e4yjnAgAEDBgwYMGDA7AJMd1l/3NRdVGcj3eX/2WEhCmDGxnM7yqygu8XIPjJj8iN/MGDAgAEDBgwYMAuDGb8q0RGlLCHLv1t9qDKWn3vdNHVuEI6HPaxO9Jo3GDBgwIABAwYMmIXBdC9ShGgMk+XnkXUeuGcsP/e1+lhNnZsL/G5Vs3OAAQMGDBgwYMCAWSxMR3SzOmraG5atdy9wZKzb+vg16qyqe2FltbnAgAEDBgwYMGDALAxmTJSuN3WA76rnVca6GTnemGN1WoEBAwYMGDBgwIBZGMxUomy4+xO899V4LAg5Xnc2MGDAgAEDBgwYMGA218Wq+2K1LDqvY9xZu8zN8fICdM6btYABAwYMGDBgwIABMzfH0+pGU5afze2tXebmeAfVz+p8BQYMGDBgwIABAwbMPBzZ+oWmfJrln1273FhkbHzee9WWbw7AgAEDBgwYMGDALAKm43hcdctKgblcPamOhuXnXlY5Xs6bsW4FGyQCAwYMGDBgwIABswiYMceZKgvMo+h8mrHLTdn676rj+FEFoTtHd8MwOxEYMGDAgAEDBgyYRcBM5UhXqiymW3R3c9ARhWO/OmjqfjVZy+xEYMCAAQMGDBgwYBYG073OnCV0RFNhMhaOa9WfKmOB6XjHMN1tQmaAAQMGDBgwYMCA2VWY7vXjz1U4croAzgPztwIDBgwYMGDAgAEDZhswh035NBw59Dww3RgYMGDAgAEDBgwYMJuD6f4tXT7NUqfCdBvZLkxXdgQGDBgwYMCAAQNmt2DGj8WzwAfV/w7T/aq7mxwwYMCAAQMGDBgwuwqTOo7uTwTngflSzQ3TdaJvAwEDBgwYMGDAgAED5gSvgbyo5oHZ4Pc+gwEDBgwYMGDAgAEzhOm+5G0qTGaAAQMGDBgwYMCAAXNaMOcnls3tNwWm+zRzp54NDBgwYMCAAQMGDJh5YNL36k1TLuGvVq+qnKMbS5n7tulT9asCAwYMGDBgwIABA2ZumKuztLnjgQEDBgwYMGDAgNl5mH/4/ltKA6vBNAAAAABJRU5ErkJggg==";

  $fmt='%1$s:<img src="rotate.php?angle=%2$d&orig=%3$s" alt="%1$s" /><br/>' . "\n";

  printf( $fmt, "Original",  0, urlencode($image) );
  printf( $fmt, "Rotated",  90, urlencode($image) );

?>


通过将HTML生成和PNG生成分离为两个单独的PHP脚本,您最初要求避免在磁盘上生成临时文件的请求就实现了。

您能提供一个示例图像吗?是的,对不起,我想用另一种方式键入。我建议您查看一下。我用它解决了我的问题。感谢您的回答,当我尝试您的解决方案时,我得到一个图像损坏或截断错误@DanielAdarve一开始我忘了添加
base64\u decode()
。你的代码中有吗?我有,图像仍然显示为腐败。这并没有回答问题,它明确规定“不保存到磁盘”作为一项要求。
<?php

  // Pixel Art from Star Wars http://www.pixeljoint.com/pixelart/1423.htm
  $image = "iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAMAAACwUBm+AAAAAXNSR0IArs4c6QAAAKtQTFRFsAAAvbWSLUUrLEQqY1s8UYJMqJ1vNTEgOiIdIzYhjIFVLhsXZ6lgSEIsP2U8JhcCVzMsSXZEgXdOO145XJdWOl03LzAYMk4vSXNExr+hwcuxRTs1Qmk+RW9Am49eFRANQz4pUoNMQWc+OSMDTz0wLBsCNVMxa2NBOyUDUoNNSnlEWo9VRGxAVzYFl6tXCggHbLNmMUIcHhwTXkk5f3VNRT8wUT8xAAAACQocRBWFFwAAAAF0Uk5TAEDm2GYAAAPCSURBVHja7d3JctNAFIZRMwRCCGEmzPM8z/D+T8bu/ptbXXJFdij5fMt2Wuo+2UgqxVmtttq5WVotLzBgwIABAwYMGDCn0qVqbo69psPqVpWx+1XG5iaavF8wYMCAAQMGDBgwi4DJ6Y6qkxB1HNlcN3a92gbR5P2CAQMGDBgwYMCAWSxMlrU+UY5yu2l9okfV4bAxUVbf7TJnAwMGDBgwYMCAAbMLMHeqbGR82Zy+VR1Ht81nVca6R+UdTLaU24Ruzd3qM/e4yjnAgAEDBgwYMGDA7AJMd1l/3NRdVGcj3eX/2WEhCmDGxnM7yqygu8XIPjJj8iN/MGDAgAEDBgwYMAuDGb8q0RGlLCHLv1t9qDKWn3vdNHVuEI6HPaxO9Jo3GDBgwIABAwYMmIXBdC9ShGgMk+XnkXUeuGcsP/e1+lhNnZsL/G5Vs3OAAQMGDBgwYMCAWSxMR3SzOmraG5atdy9wZKzb+vg16qyqe2FltbnAgAEDBgwYMGDALAxmTJSuN3WA76rnVca6GTnemGN1WoEBAwYMGDBgwIBZGMxUomy4+xO899V4LAg5Xnc2MGDAgAEDBgwYMGA218Wq+2K1LDqvY9xZu8zN8fICdM6btYABAwYMGDBgwIABMzfH0+pGU5afze2tXebmeAfVz+p8BQYMGDBgwIABAwbMPBzZ+oWmfJrln1273FhkbHzee9WWbw7AgAEDBgwYMGDALAKm43hcdctKgblcPamOhuXnXlY5Xs6bsW4FGyQCAwYMGDBgwIABswiYMceZKgvMo+h8mrHLTdn676rj+FEFoTtHd8MwOxEYMGDAgAEDBgyYRcBM5UhXqiymW3R3c9ARhWO/OmjqfjVZy+xEYMCAAQMGDBgwYBYG073OnCV0RFNhMhaOa9WfKmOB6XjHMN1tQmaAAQMGDBgwYMCA2VWY7vXjz1U4croAzgPztwIDBgwYMGDAgAEDZhswh035NBw59Dww3RgYMGDAgAEDBgwYMJuD6f4tXT7NUqfCdBvZLkxXdgQGDBgwYMCAAQNmt2DGj8WzwAfV/w7T/aq7mxwwYMCAAQMGDBgwuwqTOo7uTwTngflSzQ3TdaJvAwEDBgwYMGDAgAED5gSvgbyo5oHZ4Pc+gwEDBgwYMGDAgAEzhOm+5G0qTGaAAQMGDBgwYMCAAXNaMOcnls3tNwWm+zRzp54NDBgwYMCAAQMGDJh5YNL36k1TLuGvVq+qnKMbS5n7tulT9asCAwYMGDBgwIABA2ZumKuztLnjgQEDBgwYMGDAgNl5mH/4/ltKA6vBNAAAAABJRU5ErkJggg==";

  $fmt='%1$s:<img src="rotate.php?angle=%2$d&orig=%3$s" alt="%1$s" /><br/>' . "\n";

  printf( $fmt, "Original",  0, urlencode($image) );
  printf( $fmt, "Rotated",  90, urlencode($image) );

?>
<?php

  $angle = (int)$_GET['angle'];      // Force this to be an int
  $orig = $_GET['orig'];  // We could do input validation on this, but meh.

  $ih = imagecreatefromstring(base64_decode($orig));

  $rotated = imagerotate($ih, $angle, 0);

  header("Content-Type: image/png");
  imagepng($rotated);

?>