使用imagerotate进行jpeg旋转

时间:2019-04-24 09:00:55

标签: php jpeg

我有一个包含jpeg照片数据表的数据库。此数据已从iPad应用程序发送到数据库,并可以使用以下内容显示在网页中:

$photo_query = "SELECT photoID, photoData FROM tblPhotos;";
$resultPhotos = mysqli_query($connect, $photo_query);
while($rowPhotos = mysqli_fetch_array($resultPhotos)) { ?>
    <div id="photo"> <?php
        echo '<img src="data:image/jpeg;base64,' . base64_encode($row['photoData']) .'"/>';
    </div>
}

这可以正常工作,并且图像可以正确显示。

我现在正在寻找添加一个简单的工具来旋转此图像。图片下方是一个简单的图片,单击此图片后,将使用photoID调用javascript函数updatePhoto:

<div onclick="updatePhoto('<?php echo $photoID; ?>')">Rotate</div>

JAVASCRIPT

function updatePhoto(photoID) {
        $.post("photoChange.php", {
        photoToChange: photoID
        },
        function(data, status){
            document.getElementById('photo').innerHTML = "<img  src='data:image/jpeg;base64, base64_encode(" + data + ")'/>";
    }); 

}

PHOTOCHANGE.PHP

$photoID = $_POST['photoToChange');
$select_photo_query = "Select photoData From tblPhotos where photoID= '" . $photoID ."';";
$resultPhotos = mysqli_query($connect, $select_photo_query);
while($rowPhotos = mysqli_fetch_array($resultPhotos)) {
    $source =  $rowPhotos['photoData'];
}

$degrees=90;
$image = imagecreatefromstring ($source);
$rotate = imagerotate($image, $degrees, 0);
$finalImage = imagejpeg($rotate);
//step to convert jpeg back to binary needed?

echo $finalImage;

所有这些工作是将photoID发送到photoChange.php,从数据库中检索源等,然后将数据发送回并放置到页面中。但是它不显示图像,仅显示大量数据。我知道我这里有一个编码问题,但我不确定到底是什么。

我尝试删除所有旋转细节,并简单地未更改地回显$ source,这不会用图像本身代替图像,而是用数据行代替。因此,我想知道在发布数据和回显数据时是否存在问题,是否需要规定所使用的编码方法?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

转到:http://php.net/imagejpeg

它返回一个boolean值,并将图像直接转储到输出中。

$finalImage = imagejpeg($rotate);
//step to convert jpeg back to binary needed?

echo $finalImage;

相反,添加内容类型并直接渲染图像(您不需要echoechoimagejpeg()上是隐含的):

header('Content-Type: image/jpeg');
imagejpeg($rotate);

更多问题:

您的<div id="photo">处于while循环中,这会使您的ID变得不唯一,当您拥有多于1张图片时,该ID就无法工作

另一个问题:

您使用Javascript插入PHP,使其无法使用。将此行替换为固定连接:

.innerHTML = "<img  src='data:image/jpeg;base64, " + data + "'/>";

在图像创建步骤中放入base64编码,我们在那里使用输出缓冲区:

header('Content-Type: text/plain');
ob_start();
imagejpeg($rotate);
$binary = ob_get_contents();
echo base64_encode($binary);
ob_end();