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;
    }   
}