Php 将上载的图片保存到缩略图和base64_编码字符串
好的,假设我们有一个表单,其中有一个简单的文件上传输入Php 将上载的图片保存到缩略图和base64_编码字符串,php,html,file-upload,base64,Php,Html,File Upload,Base64,好的,假设我们有一个表单,其中有一个简单的文件上传输入 <form action="index.php" method="post" enctype="multipart/form-data"> <input name="image_file" type="file" /> <input type="submit" name="submit-btn" value="Upload" /> </form> 然后我尝试重新调整文件大小 switch(
<form action="index.php" method="post" enctype="multipart/form-data">
<input name="image_file" type="file" />
<input type="submit" name="submit-btn" value="Upload" />
</form>
然后我尝试重新调整文件大小
switch($image_type){
case 'image/png':
$image_res = imagecreatefrompng($image_temp);break;
case 'image/gif':
$image_res = imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}
现在我想将图像输出到用户的浏览器,而无需存储文件。
这就是我为什么要这么做的原因
$data = base64_encode(file_get_contents($_FILES['image_file']['tmp_name']));
但我认为我的逻辑有一个错误,因为它没有输出图片,不管怎样,我最终想要的是像下面这样回显图片。
switch($image_type){
case 'image/png':
echo '<img src="data:image/png;base64,"'.$data.' alt="" />'; break;
case 'image/gif':
echo '<img src="data:image/gif;base64,"'.$data.' alt="" />';break;
case 'image/jpeg': case 'image/pjpeg':
echo '<img src="data:image/jpeg;base64,"'.$data.' alt="" />';break;
}
开关($image\u类型){
案例“image/png”:
回音;中断;
案例“image/gif”:
回音;中断;
案例“image/jpeg”:案例“image/pjpeg”:
回音;中断;
}
有人能看到故障吗?因为您对文件进行了如下编码:
$data = base64_encode(file_get_contents($_FILES['image_file']['tmp_name']));
因此,您应该按如下方式输出它:
switch($image_type){
case 'image/png':
echo '<img src="data:image/png;base64,"'.$data.'" alt="" />'; break;
case 'image/gif':
echo '<img src="data:image/gif;base64,"'.$data.'" alt="" />';break;
case 'image/jpeg': case 'image/pjpeg':
echo '<img src="data:image/jpg;base64,'.$data.'" alt="" />';break;
}
开关($image\u类型){
案例“image/png”:
回音;中断;
案例“image/gif”:
回音;中断;
案例“image/jpeg”:案例“image/pjpeg”:
回音;中断;
}
无需使用解码功能。设置内容类型标题,并根据需要将$image\u res与
imagejpeg
、imagegif
或imagepng
一起使用:
switch($image_type){
case 'image/png':
echo '<img src="data:image/png;base64,"'.$data.' alt="" />'; break;
case 'image/gif':
echo '<img src="data:image/gif;base64,"'.$data.' alt="" />';break;
case 'image/jpeg': case 'image/pjpeg':
echo '<img src="data:image/jpeg;base64,"'.$data.' alt="" />';break;
}
switch($image_type){
case 'image/png':
header('Content-Type: image/png');
imagepng($image_res);
case 'image/gif':
header('Content-Type: image/gif');
imagegif($image_res);
case 'image/jpeg': case 'image/pjpeg':
header('Content-Type: image/jpeg');
imagejpeg($image_res);
}
它在您发布的屏幕截图中看起来像的原因是,标题在发送到浏览器后无法修改。输出表单时,将发送标题
您可以通过在不同页面中分离表单和php逻辑来解决此问题:
index.php
<form action="process.php" method="post" enctype="multipart/form-data">
<input name="image_file" type="file" />
<input type="submit" name="submit btn" value="Upload" />
</form>
// check $_FILES['ImageFile'] not empty
if (!isset($_FILES['image_file']) ||
!is_uploaded_file($_FILES['image_file']['tmp_name'])){
die('Image file is Missing!'); // output error when above checks fail.
}
// uploaded file info we need to proceed
$image_name = $_FILES['image_file']['name']; //file name
$image_size = $_FILES['image_file']['size']; //file size
$image_temp = $_FILES['image_file']['tmp_name']; //file temp
$image_size_info = getimagesize($image_temp); //get image size
if ($image_size_info) {
$image_width = $image_size_info[0]; //image width
$image_height = $image_size_info[1]; //image height
$image_type = $image_size_info['mime']; //image type
}
else {
die("Make sure image file is valid!");
}
switch ($image_type) {
case 'image/png':
$image_res = imagecreatefrompng($image_temp);break;
case 'image/gif':
$image_res = imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}
switch($image_type){
case 'image/png':
header('Content-Type: image/png');
imagepng($image_res);
case 'image/gif':
header('Content-Type: image/gif');
imagegif($image_res);
case 'image/jpeg': case 'image/pjpeg':
header('Content-Type: image/jpeg');
imagejpeg($image_res);
}
问题是因为您在此处使用了双引号(
“
)
PHP
if(isset($\u POST['submit-btn'])){
//检查$\u文件['ImageFile']是否不为空
如果(!isset($_FILES['image_file'])| |!是否上载了_file($_FILES['image_file']['tmp_name'])){
die('缺少图像文件!');//当上述检查失败时,输出错误。
}
//上传文件信息
$image\u temp=$\u FILES['image\u file']['tmp\u name'];//file temp
$image\u size\u info=getimagesize($image\u temp);//获取图像大小
如果($image\u size\u info){
$image\u type=$image\u size\u info['mime'];//图像类型
}否则{
die(“确保图像文件有效!”);
}
$data=base64_编码(文件获取内容($image_temp));
交换机($image\u类型){
案例“image/png”:
回音;中断;
案例“image/gif”:
回音;中断;
案例“image/jpeg”:案例“image/pjpeg”:
回音;中断;
}
}
您的解决方案不起作用,我得到警告:imagepng()希望参数1是资源,字符串给定
...
echo '<img src="data:image/png;base64,"'.$data.' alt="" />'; break;
^ your double quote here is wrong
echo '<img src="data:image/png;base64,'.$data.'" alt="" />'; break;
^ your double quote should be here
<form action="index.php" method="post" enctype="multipart/form-data">
<input name="image_file" type="file" />
<input type="submit" name="submit-btn" value="Upload" />
</form>
if(isset($_POST['submit-btn'])){
// check $_FILES['ImageFile'] not empty
if(!isset($_FILES['image_file']) || !is_uploaded_file($_FILES['image_file']['tmp_name'])){
die('Image file is Missing!'); // output error when above checks fail.
}
//uploaded file info
$image_temp = $_FILES['image_file']['tmp_name']; //file temp
$image_size_info = getimagesize($image_temp); //get image size
if($image_size_info){
$image_type = $image_size_info['mime']; //image type
}else{
die("Make sure image file is valid!");
}
$data = base64_encode(file_get_contents($image_temp));
switch($image_type){
case 'image/png':
echo '<img src="data:image/png;base64,'.$data.'" alt="" />'; break;
case 'image/gif':
echo '<img src="data:image/gif;base64,'.$data.'" alt="" />';break;
case 'image/jpeg': case 'image/pjpeg':
echo '<img src="data:image/jpeg;base64,'.$data.'" alt="" />';break;
}
}