【问题标题】:Rotated image wont display in php旋转的图像不会在php中显示
【发布时间】:2014-02-02 14:21:12
【问题描述】:

所以我正在尝试创建一个指南针来显示风向。

 Function rotate($angle) {
     $original = imagecreatefrompng("img/Arrow.png");
     $compass = imagerotate($original, $angle, 0);
     return $compass;
 }

这将使用我正在回显的一些 html 来显示。变量角度是从数据库传递的。 php脚本上的html是这样的:

<img src='".rotate($row['wind_dir'])."'/>

图像从不显示,显然浏览器不知道它在哪里。

当我在浏览器中查看 html 时,上面的行显示为

<img src="Resource id #4"/>

当我点击它时,它会导航到 404。

我做错了什么?我是不是忘记了图像旋转功能中的一行?

编辑: 尝试了以下一些回复后,我得到了一张图片,但它只显示为一个黑框!

EDIT2:

经过一番折腾,结果发现只需要将imagerotate() 的第三个值改为-1,如下所示:

$original = imagecreatefrompng("img/goog.png");
$compass = imagerotate($original, $angle, -1);
imagealphablending($compass, true);
imagesavealpha($compass, true);
header('Content-Type: image/png');
imagepng($compass);
imagedestroy($compass);

【问题讨论】:

  • 我无法想象这段代码效率太高。每次加载页面时,您都会创建一个图像。您是否考虑过改用 CSS 或 JS 旋转?
  • 即使你已经解决了这个问题,你也应该注意别人所说的话。这是非常低效的。

标签: php html image image-rotation


【解决方案1】:

我发表了一条关于改用 CSS 或 JS 旋转的评论,但从那以后我有了一个更好的主意。

指南针在 360 度位置之一始终是 Arrow.png。

在 Photoshop 或 PHP 中使用批处理创建 360 度版本。每个学位一个。然后你可以调用 Arrow_120.png 例如 120 度。您消除了现有代码动态创建图像的问题,同时避免了与 CSS / JS 的兼容性问题。

【讨论】:

  • 虽然我可能会使用它,但这是用于大学作业,我们的一小部分分数来自 php 图像处理等
【解决方案2】:

你必须执行函数并发送头文件:尝试如下,假设我们的 php 文件名为 rotate.php:

旋转.php

function rotate($angle) {
     $original = imagecreatefrompng("test.png");
     $compass = imagerotate($original, $angle, 0);
     header('Content-Type: image/png');
     imagepng($compass);
     imagedestroy($compass);
 }

if(isset($_GET['angle'])){
 rotate($_GET['angle']);
}

然后在您的 html 中,您可以调用网络资源,即您的 php 文件为:

<img src="url_to_rotate.php?angle=90" />

还记得在执行之前清理 GET 输入。

【讨论】:

【解决方案3】:

显示的图像应该是图像文件。为此,您应该使用 imagejpeg();

所以基本上你应该有 2 个 php 文件:

1:使用您的代码和 imagejpeg() 创建图像文件;

<?php

$original = imagecreatefrompng("img/Arrow.png");
$compass = imagerotate($original, $_GET['angle'], 0);
header('Content-Type: image/jpeg');
imagejpeg($compass);
?>

2:显示图片的php文件。

<img src='image.php?angle=".$row['wind_dir']."'/>

如果您只需要一个文件,您可以执行以下操作:

<?php

$original = imagecreatefrompng("img/Arrow.png");
$compass = imagerotate($original, $_GET['angle'], 0);

ob_start();
imagepng($compass);
$stringdata = ob_get_contents(); 
ob_end_clean(); 

$imageData = base64_encode($stringdata);
$src = 'data: image/png;base64,'.$imageData;
echo '<img src="',$src,'">';
?>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多