php图片压缩

index2.php负责处理图片压缩部分的逻辑

<?php
$pic_name=date("YmdHis");
// 生成图片的宽度 $pic_width=500;
$pic_width=$_POST['width'];
// 生成图片的高度 $pic_height=500;
$pic_height=$_POST['length'];
function ResizeImage($im,$maxwidth,$maxheight,$name){
 //取得当前图片大小
 $width = imagesx($im);
 $height = imagesy($im);
 //生成缩略图的大小
 if(($width > $maxwidth) || ($height > $maxheight)){
  $widthratio = $maxwidth/$width;
  $heightratio = $maxheight/$height;
  if($widthratio < $heightratio){
   $ratio = $widthratio;
  }else{
   $ratio = $heightratio;
  }
  $newwidth = $width * $ratio;
  $newheight = $height * $ratio;

  if(function_exists("imagecopyresampled")){
   $newim = imagecreatetruecolor($newwidth, $newheight);
   imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  }else{
   $newim = imagecreate($newwidth, $newheight);
   imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  }
  ImageJpeg ($newim,$name . ".jpg");
  ImageDestroy ($newim);
 }else{
  ImageJpeg ($im,$name . ".jpg");
 }
}

if($_FILES['image']['size']){
 //echo $_FILES['image']['type'];
 if($_FILES['image']['type'] == "image/pjpeg"||$_FILES['image']['type'] == "image/jpg"||$_FILES['image']['type'] == "image/jpeg"){
  $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
 }elseif($_FILES['image']['type'] == "image/x-png"){
  $im = imagecreatefrompng($_FILES['image']['tmp_name']);
 }elseif($_FILES['image']['type'] == "image/gif"){
  $im = imagecreatefromgif($_FILES['image']['tmp_name']);
 }
 if($im){
  if(file_exists($pic_name.'.jpg')){
   unlink($pic_name.'.jpg');
  }
  ResizeImage($im,$pic_width,$pic_height,$pic_name);
  ImageDestroy ($im);
 }
} 
?>
前端表单数据form提交

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP上传图片自动压缩</title>
</head>

<body>
<img src="<? echo $pic_name.'.jpg'; ?>"><br><br>     
<form enctype="multipart/form-data" method="post" action="index2.php">     
<br>     
<input type="file" name="image" size="50" value="浏览"><p>     
生成缩略图宽度:<input type="text" name="width" size="5"><p>    
生成缩略图长度:<input type="text" name="length" size="5"><p>    
<input type="submit" value="上传图片">     
</form>
</body>
</html>


### PHP 实现图片压缩的方法 在 PHP 中实现图片压缩可以通过多种方式完成,既可以使用内置函数也可以借助第三方库来简化开发流程并提高效率。 #### 使用 PHP 内置方法进行图片压缩 PHP 提供了 GD 库和 ImageMagick 扩展用于处理图像。GD 是一种轻量级的解决方案,适合大多数基本需求[^2]。下面是一个基于 GD 的简单例子: ```php function compressImage($source, $destination, $quality) { // 获取原始文件的信息 $info = getimagesize($source); if ($info['mime'] === 'image/jpeg') { $image_create_func = 'imagecreatefromjpeg'; $image_save_func = 'imagejpeg'; } elseif ($info['mime'] === 'image/png') { $image_create_func = 'imagecreatefrompng'; $image_save_func = 'imagepng'; } // 创建一个新的图像资源 $img = $image_create_func($source); // 压缩保存到目标路径 $image_save_func($img, $destination, $quality); // 清理内存中的图像数据 imagedestroy($img); } // 调用示例 compressImage('3.jpg', 'test_3_compressed.jpg', 75); // quality 参数范围为0-100 ``` 此代码片段展示了如何通过调整 JPEG 或 PNG 图像的质量参数来进行简单的压缩操作[^2]。 #### 推荐使用的第三方库 对于更复杂的功能或更高的性能要求,可以考虑以下几个流行的第三方库: 1. **Intervention Image** Intervention Image 是一个非常流行且易于使用的 PHP 图片处理库,支持链式调用来执行各种复杂的图片编辑任务,包括但不限于裁剪、调整大小以及压缩等。 安装命令如下: ```bash composer require intervention/image ``` 示例代码展示如何加载一张图片并将它压缩后存储下来: ```php use Intervention\Image\Facades\Image; $img = Image::make('public/foo.jpg')->resize(300, null)->encode('jpg', 75); $img->save('public/bar.jpg'); ``` 2. **Imagick** 如果项目允许安装扩展,则可以直接利用 Imagick 这一强大的工具集。相比纯 PHP 解决方案而言,其速度更快并且功能更加全面[^3]。 下面是如何创建一个新实例并对图片应用特定设置的例子: ```php $imagick = new \Imagick(realpath('input_image_path')); $imagick->setImageCompressionQuality(80); $imagick->writeImage('output_image_path'); $imagick->clear(); $imagick->destroy(); ``` 以上两种方法各有优劣,在实际选用时需综合考量服务器环境配置情况和个人偏好等因素决定采用哪种方式进行图片压缩工作。 ### 总结 无论是选择标准库还是引入外部依赖项都可以很好地满足日常业务场景下的图片压缩需求。如果追求简洁易维护则倾向于前者;而后者更适合那些希望获得额外灵活性或者更高性能表现的应用场合[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值