旋转的图像不会在PHP中显示

时间:2014-02-02 14:21:13

标签: php html image image-rotation

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

 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);

3 个答案:

答案 0 :(得分:2)

我发布了关于使用CSS或JS旋转的评论,但从那时起我就有了更好的主意。

指南针总是在360个位置之一中成为Arrow.png。

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

答案 1 :(得分:0)

显示的图像应该是图像文件。要实现这一点,你应该使用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,'">';
?>

答案 2 :(得分:0)

你必须执行该函数并发送标题:尝试如下,说我们的php文件名是rotate.php:

rotate.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输入。