使用PHP上传时,如何使图像上传大小更小?

时间:2018-03-06 03:57:12

标签: php

我试图将图片上传到图像上传的位置,它会将图像压缩到比现在更小的尺寸或类似的尺寸。我有一个管理员可以将图像或图像上传到主页面滑块的地方,但是我想让它在图像的较小尺寸而不是完整的1.1mb图像或者什么不。关于我目前如何使用我的代码执行此操作的任何想法?

继承我的滑块代码,它获取图像来自我的数据库的链接:

<div class="tp-banner-container rev_slider_wrapper fullwidthbanner-container"
     data-alias="news-hero72">
    <div class="tp-banner-slider">
        <ul>
                                            <?php

    $stmt = $DB_con->prepare('SELECT * FROM slider');
    $stmt->execute();
if($stmt->rowCount() > 0)
{
    while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);
        ?>
            <li data-index="rs-80" data-transition="fade" data-slotamount="7" data-masterspeed="500"
                data-saveperformance="on"
                data-title="Intro Slide">
                <img src="images/slider/<?php echo $row['link']; ?>" alt="slidebg1" 
                     data-bgposition="center top" data-bgfit="cover"
                     data-bgrepeat="no-repeat">
                <div class="revolution_heading_font tp-caption grey_heavy_72 skewfromrightshort tp-resizeme rs-parallaxlevel-2" data-x="0"
                     data-y="200" data-speed="700" data-start="10" data-easing="Power3.easeInOut" data-splitin="chars"
                     data-splitout="none" data-elementdelay="0.1" data-endelementdelay="0.1"
                     style="z-index: 5; max-width: inherit; max-height: inherit; white-space: nowrap;color: #FFFFFF;font-size:30pt;font-family: Montserrat">
                    <?php echo $row['slide_name']; ?>
                </div>
                <div class="revolution_font tp-caption grey_heavy_72 skewfromrightshort tp-resizeme rs-parallaxlevel-2" data-x="5"
                     data-y="300" data-speed="300" data-start="600" data-easing="Power3.easeInOut" data-splitin="words"
                     data-splitout="none" data-elementdelay="0.1" data-endelementdelay="0.1"
                     style="z-index: 5; max-width: inherit; max-height: inherit; white-space: nowrap;color: #ffffff;font-weight: 300;font-size:18pt; line-height: 30pt; margin-left:8px">
                   <?php echo $row['slide_desc'];?> 
                </div>


                                        <?php
    }
}
else
{
    ?>
                                        <?php
}
?>
                                </div>
                            </div>
                        </div>


            </li>

        </ul>
    </div>
</div>

这是我的PHP其中管理员可以编辑滑块名称,描述和上传滑块图像。

 <?php

    if(isset($_GET['edit_id']) && !empty($_GET['edit_id']))
    {
        $id = $_GET['edit_id'];
        $stmt_edit = $DB_con->prepare('SELECT * FROM sponsors WHERE id =:uid');
        $stmt_edit->execute(array(':uid'=>$id));
        $edit_row = $stmt_edit->fetch(PDO::FETCH_ASSOC);
        extract($edit_row);
    }
    else
    {
        header("Location: ../../login.php");
    }
    if(isset($_POST['btn_save_updates']))
    {
        $username = $_POST['user_name'];
        $description = $_POST['description'];       
        $imgFile = $_FILES['user_image']['name'];
        $tmp_dir = $_FILES['user_image']['tmp_name'];
        $imgSize = $_FILES['user_image']['size'];
        if($imgFile)
        {
            $upload_dir = '../images/sponsors/';
            $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION));
            $valid_extensions = array('jpeg', 'jpg', 'png', 'gif');
            $userprofile = rand(1000,1000000).".".$imgExt;
            if(in_array($imgExt, $valid_extensions))
            {           
                if($imgSize < 5000000) 
                {
                    unlink($upload_dir.$edit_row['logo']);
                    move_uploaded_file($tmp_dir,$upload_dir.$userprofile);
                }
                else
                {
                    $errMSG = "Sorry, Your File Is Too Large To Upload. It Should Be Less Than 5MB.";
                }
            }
            else
            {
                $errMSG = "Sorry, only JPG, JPEG, PNG & GIF Extension Files Are Allowed.";      
            }   
        }
        else
        {
            $userprofile = $edit_row['logo'];
        }
        if(!isset($errMSG))
        {
            $sponsorname = $_POST['sponsor_name'];
            $motto = $_POST['sponsor_motto'];
            $phone = $_POST['sponsor_phone'];
            $website = $_POST['sponsor_website'];
            $son = $_POST['sponsor_on'];

            $stmt = $DB_con->prepare('UPDATE sponsors SET name=:sname, motto=:smotto, phone=:sphone,website=:swebsite,live=:son, logo=:upic WHERE id=:uid');
            $stmt->bindParam(':sname',$sponsorname);
            $stmt->bindParam(':smotto',$motto);
            $stmt->bindParam(':sphone',$phone);
            $stmt->bindParam(':swebsite',$website);
            $stmt->bindParam(':son',$son);
            $stmt->bindParam(':upic',$userprofile);
            $stmt->bindParam(':uid',$id);

            if($stmt->execute()){
                ?>
                <script>
                alert('Successfully Updated...');
                window.location.href='managesponsors.php?action=sponsorupdated';
                </script>
                <?php
            }
            else{
                $errMSG = "Sorry User Could Not Be Updated!";
            }
        }           
    }
?>

3 个答案:

答案 0 :(得分:2)

如果您想要的是压缩上传的图像文件,那么直接的方法是使用php函数imagejpeg()并编辑您的上传代码 从这个:

move_uploaded_file($tmp_dir,$upload_dir.$userprofile);

到此:

if (move_uploaded_file($tmp_dir,$upload_dir.$userprofile)) {
    $image = imagecreatefromjpeg($upload_dir.$userprofile);
    imagejpeg($image,$upload_dir.$userprofile,75); //75 is quality of the compression (can be anywhere lower than 100)

} 

现在您的图片应该是原始尺寸的75%,请注意这只适用于jpeg图片,您需要将 imagecreatefromjpeg 替换为 imagecreatefromgif imagecreatefrompng 取决于上传的图像格式

答案 1 :(得分:1)

您可以使用GD或Imagick来完成此操作,如下所示

$thumb = new Imagick('myimage.gif');

$thumb->resizeImage(320,240,Imagick::FILTER_LANCZOS,1);
$thumb->writeImage('mythumb.gif');

$thumb->destroy(); 

image resize using imagick

或者您将获得大量的PHP库,这将有助于您的工作。

答案 2 :(得分:0)

您应该尝试https://piio.co使用此工具,您不需要自己转换图像,工具将在您基于客户端设备将图像提供给客户端之前为您完成。

集成非常简单,您只需将<img src="image.jpg" />更改为<img data-piio="image.jpg />并在HTML中包含JS库。你不需要运行一个cron-job或任何东西来调整和压缩你的图像,Piio会自动为你做这件事。

文档位于https://piio.co/docs