我正在使用此代码 Android应用中拍摄照片:
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK){
photo = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 40, baos);
byte[] photoByte = baos.toByteArray();
encodedImage = Base64.encodeToString(photoByte,Base64.DEFAULT);
}
我通过POST将此字符串encodedImage
发送到我的PHP服务器并将其接收到$encodedImage
。我有一个数据库,其中我有myImage
类型的字段MEDIUMBLOB
。我尝试将encodedimage
保存在myImage
中,但会将其另存为损坏的图像。我试图保存为base64_decode($encodedImage)
,但不知何故,它也没有用。
我想要做三件事:
将图像保存到服务器端数据库(BLOB)
将图片显示到网页
将其发回Android应用。
我正面临着了解上述任务所需的不同格式的图片转换的问题。
对于我当前的项目,我不想将我的图像保存到文件夹并提供数据库链接,因此该选项对我来说是关闭的。
我保存图片的PHP代码:
$baseImage = $_POST['baseImage'];
$blobImage = base64_decode($baseImage);
$query = "INSERT INTO `complaints`(`myImage`,...) VALUES ('$blobImage',...)"
$result = mysqli_query($conn,$query);
答案 0 :(得分:3)
不要在PHP中解码图像,在收到图像时将其存储, 现在,在前端,您可以按照以下方式打印图像
<?php
$img = '<img src="data:image/jpeg;base64,' . $encodedImgStoredInDB . '">';
print $img;
?>
答案 1 :(得分:1)
使用关键字_binary&#34;
为SQL添加前缀$query = "INSERT INTO `complaints`
(`myImage`,...)
VALUES (_binary'".addcslashes($blobImage, "\x00\'\"\r\n")."',...)"
此外,使用CURL设置测试环境,以便您可以重复抛出base64编码的图像。这将是您需要大量调试的情况。
<?php
$f = fopen('sample.jpg.base64.txt', 'w');
$i = fopen('sample.jpg', 'r');
if (!$i) { die("cannot open sample.jpg\n"); }
$bytes = '';
while ( ! feof($i)) {
$bytes .= fread($i, 4096);
}
fclose($i);
fputs($f, base64_encode( $bytes ) );
fclose($f);
然后使用curl重复发布并调试PHP
curl -X PUT "http://localhost/myimport.php" -F "baseImage=@./sample.jpg.base64.txt"
调整PHP脚本,只需将数据写入硬盘驱动器上的文件并在那里进行检查。写出多个版本,包括编码和解码。
就个人而言,我不会将从Android到PHP的字节数为64,但我将 base64在mysql中对它们进行编码。