Php 旋转Base64图像字符串而不保存图像
我从FedExShipping API得到一个响应,其中包括一个PNG base64图像,但是图像是垂直的。我想将此图像旋转90度,而不将其保存到磁盘,并将其显示在浏览器中以便进一步打印 我尝试先解码字符串,然后使用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\" />"; 也许是这样的。创建一个文件来输出图像
$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">
借助css3transform
属性,您还可以在浏览器中进行旋转:
$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);
?>