所以,我被困在这几个小时。我已经厌倦了谷歌任何解决方案,但没有找到解决方案。所以任何帮助都非常感谢。
我的问题:
我正在使用表单上传多张图片。由于数据在多个服务器上备份,我必须将它们存储在数据库中。 将图像存储在文件夹上不是解决方案。我认为我可以将图像保存到数据库中,但我需要创建所有正在上传的图像的缩略图。所以这是我的问题,我如何从这些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" />';
}
我需要创建正在上传的文件的缩略图。我如何实现这一目标。
请告知。
感谢您的帮助。
干杯
答案 0 :(得分:1)
这是你的大问题:
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;