所以我正在尝试创建一个指示风向的指南针。
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);
答案 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输入。