0

我有一个包含 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>
}

这工作正常,图像显示正确。

我现在正在寻找一个简单的工具来旋转这个图像。下面的图像是一个简单的,当单击它时,javascript 函数 updatePhoto 会使用 photoID 调用:

<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 不变,这不会用自身替换图像,而是用数据行替换。所以我想知道在发布数据和回显数据时是否存在问题,是否需要规定正在使用的编码方法?

非常感谢任何帮助。

4

1 回答 1

0

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

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

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

echo $finalImage;

取而代之的是,添加内容类型并让图像直接呈现(您不需要echoecho隐含在 上imagejpeg()):

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

更多问题:

你有<div id="photo">一个while循环,这使得你的ID不是唯一的,当你有超过1张图片时它不能工作

另一个问题:

您在 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();
于 2019-04-24T09:07:35.753 回答