Я выбираю изображение, затем преобразовываю его в кодировку base64 и отправляю на свой сервер, используя Google Volley Request с методом POST.
После отправки строки на мой сервер я проверяю изображение с помощью онлайн-инструментов для декодирования изображений, но не вижу полностью изображение. Только половина этого.
public String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}
В PHP это выглядит так.
$stmt = $mysqli->prepare('INSERT INTO posts (ownerid, image, timestamp) VALUES (?, ?, ?)');
$stmt->bind_param('dsd', $uid, $image, $time);
И вот когда я пытаюсь прочитать изображение.
$stmt = $mysqli->prepare("SELECT image FROM posts WHERE id = ?");
$stmt->bind_param('d', $id);
$stmt->execute();
$stmt->bind_result($image);
$stmt->fetch();
$data = base64_decode($image);
$img = imagecreatefromstring($data);
imagejpeg($img);
imagedestroy($img);
Ошибка PHP
Warning: imagecreatefromstring(): gd-png: fatal libpng error: Read Error: truncated data in image.php on line 35
Warning: imagecreatefromstring(): gd-png error: setjmp returns error condition in image.php on line 35
Warning: imagecreatefromstring(): Passed data is not in 'PNG' format in image.php on line 35
Warning: imagecreatefromstring(): Couldn't create GD Image Stream out of Data in image.php on line 35
Warning: imagejpeg() expects parameter 1 to be resource, boolean given in image.php on line 36
Warning: imagedestroy() expects parameter 1 to be resource, boolean given in image.php on line 37
РЕДАКТИРОВАТЬ: И вот мой стол.
Blob был слишком мал для моих изображений. Я изменил его на Mediumblob, и теперь он работает.
Других решений пока нет …