在上传时压缩图片文件的大小?
image-processing
php
5
0

我正在将产品屏幕快照上传到我的网站...我想按原样上传原始图像,并为其创建缩略图,但是在上传了两个文件之后,创建的缩略图的文件大小比预期的要大。有什么办法可以减少缩略图的文件大小而又不损害php的质量或使用Imagemagick(我不知道如何使用,但愿意的话我愿意学习)。
以下是我用来上传文件的代码。

<form action="<?php echo $_server['php-self'];  ?>" method="post" enctype="multipart/form-data" id="something" class="uniForm">
    <input name="new_image" id="new_image" size="30" type="file" class="fileUpload" />
    <button name="submit" type="submit" class="submitButton">Upload/Resize Image</button>


<?php
    if(isset($_POST['submit'])){
      if (isset ($_FILES['new_image'])){
          $imagename = $_FILES['new_image']['name'];
          $source = $_FILES['new_image']['tmp_name'];
          $target = "images/".$imagename;
          move_uploaded_file($source, $target);

          $imagepath = $imagename;
          $save = "images/" . $imagepath; //This is the new file you saving
          $file = "images/" . $imagepath; //This is the original file

          list($width, $height) = getimagesize($file) ; 


          $tn = imagecreatetruecolor($width, $height) ; 
          $image = imagecreatefromjpeg($file) ; 
          imagecopyresampled($tn, $image, 0, 0, 0, 0, $width, $height, $width, $height) ; 

          imagejpeg($tn, $save, 100) ; 

          $save = "images/sml_" . $imagepath; //This is the new file you saving
          $file = "images/" . $imagepath; //This is the original file

          list($width, $height) = getimagesize($file) ; 

          $modwidth = 130; 

          $diff = $width / $modwidth;

          $modheight = 185; 
          $tn = imagecreatetruecolor($modwidth, $modheight) ; 
          $image = imagecreatefromjpeg($file) ; 
          imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height) ; 

          imagejpeg($tn, $save, 100) ; 
        echo "Large image: <img src='images/".$imagepath."'><br>"; 
        echo "Thumbnail: <img src='images/sml_".$imagepath."'>"; 

      }
    } ?>

请指出正确的方向...谢谢

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

75是默认的质量设置,但是如果使用它,质量会大大降低。 90可以为您提供出色的图像质量,并且可以将文件大小减小一半,如果您想进一步减小文件大小,请使用85或80,但没有其他效果。

收藏
评论

不要超过100作为imagejpeg()的质量-超过90的任何东西通常都是过大的,只会为您带来更大的JPEG。对于缩略图,请尝试75并向下工作,直到质量/尺寸折衷可以接受为止。

//try this
imagejpeg($tn, $save, 75) ; 
收藏
评论

应该是60,代表60%。

示例:如果您在Photoshop中打开图像并尝试将其保存在网络中并选择jpg,则使用60可以看到它仍然是高质量的,但是文件较小。如果您希望降低色泽,并降低色泽,则意味着色彩失真更大。

超过60不会给您带来更好的效果,只有更大的文件大小。

这是针对Web的标准图像优化。保持高质量,但文件尺寸尽可能小。

收藏
评论

您好@halocursed我只是尝试使用您的代码压缩不同的图像类型(如png和gif),而不使用图像变黑。因此,我修改了代码块,并很好地处理了jpg,png。

<?php
    if(isset($_POST['submit'])){
      if (isset ($_FILES['new_image'])){
          // print_r($_FILES); die;
          $imagename = $_FILES['new_image']['name'];
          $source = $_FILES['new_image']['tmp_name'];
          $target = "images/".$imagename;
          move_uploaded_file($source, $target);

          $imagepath = $imagename;
          $save = "images/" . $imagepath; //This is the new file you saving
          $file = "images/" . $imagepath; //This is the original file

          list($width, $height) = getimagesize($file); 

          $tn = imagecreatetruecolor($width, $height);

          //$image = imagecreatefromjpeg($file);
          $info = getimagesize($target);
          if ($info['mime'] == 'image/jpeg'){
            $image = imagecreatefromjpeg($file);
          }elseif ($info['mime'] == 'image/gif'){
            $image = imagecreatefromgif($file);
          }elseif ($info['mime'] == 'image/png'){
            $image = imagecreatefrompng($file);
          }

          imagecopyresampled($tn, $image, 0, 0, 0, 0, $width, $height, $width, $height);
          imagejpeg($tn, $save, 60);

          echo "Large image: ".$imagepath;

      }
    } 
?>
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号