Как изменить размер изображения без сохранения его в папке

Итак, я застрял на этом пару часов. Я устал от Google для любых решений, но не нашел решений. Поэтому любая помощь очень ценится.

Мой вопрос:

Я использую форму для загрузки нескольких изображений. Из-за того, что данные резервируются на нескольких серверах, я должен их хранить в базе данных. И сохранение изображений в папке не является решением. Я думаю, что могу сохранить изображение в базе данных, но мне нужно создать миниатюру всех загружаемых изображений. Так вот моя проблема, как мне создать эскиз из этих файлов tmp. Я создал, чтобы использовать imagecreate, что он не работает, я не могу получить содержимое этого миниатюры и сохранить его в базе данных.

Это код, который я использовал для изменения размера изображения, которое не возвращает содержимое.

function resize_image($file, $w, $h, $crop=FALSE) { list($width, $height) = getimagesize($file); $r = $width / $height; if ($crop) { if ($width > $height) { $width = abs(ceil($width-($width*abs($r-$w/$h)))); } else { $height = abs(ceil($height-($height*abs($r-$w/$h)))); } $newwidth = $w; $newheight = $h; } else { if ($w/$h > $r) { $newwidth = $h*$r; $newheight = $h; } else { $newheight = $w/$r; $newwidth = $w; } } $src = imagecreatefromjpeg($file); $dst = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); return $dst; } 

Это мой код, который используется после публикации формы: прямо сейчас он отображает только все файлы, которые загружаются.

  for($i=0;$i< count($_FILES['upload_file']['tmp_name']);$i++) { $size = getimagesize($_FILES['upload_file']['tmp_name'][$i]); $name = $_FILES['upload_file']['name'][$i]; $type = $size['mime']; $file_size_bits = $size['bits']; $file_size_width = $size[0]; $file_size_height = $size[1]; $name = $_FILES['upload_file']['name'][$i]; $image_size = $size[3]; $uploadedfile = $_FILES['upload_file']['tmp_name'][$i]; $tmpName = base64_encode(file_get_contents($_FILES['upload_file']['tmp_name'][$i])); $sImage_ = "data:" . $size["mime"] . ";base64," . $tmpName; echo '<p>Preview from the data stored on to the database</p><img src="' . $sImage_ . '" alt="Your Image" />'; } 

Мне нужно создать миниатюру тех файлов, которые загружаются. Как мне это достичь.

Пожалуйста, порекомендуйте.

Спасибо за вашу помощь.

ура

Это ваша большая проблема:

 return $dst; 

$dst – это ресурс изображения, а не данные изображения.

Вы должны использовать imagejpeg() или imagepng() для отправки данных изображения обратно.

Поскольку эти функции выводят поток данных в браузер, мы используем некоторые функции выходного буфера для захвата выводимых данных изображения вместо отправки в браузер.

Так,

 return $dst; 

заменить:

 ob_start(); imagejpeg( $dst, NULL, 100); // or imagepng( $dst, NULL, 0 ); $final_image = ob_get_contents(); ob_end_clean(); return $final_image;