提供二个常用的图片处理方法:

1、按照指定的尺寸压缩图片

   /**
* 按照指定的尺寸压缩图片
* @param $source_path 原图路径
* @param $target_path 保存路径
* @param $imgWidth 目标宽度
* @param $imgHeight 目标高度
* @return bool|string
*/
function resize_image($source_path,$target_path,$imgWidth,$imgHeight)
{
$source_info = getimagesize($source_path);
$source_mime = $source_info['mime'];
switch ($source_mime)
{
case 'image/gif':
$source_image = imagecreatefromgif($source_path);
break; case 'image/jpeg':
$source_image = imagecreatefromjpeg($source_path);
break; case 'image/png':
$source_image = imagecreatefrompng($source_path);
break; default:
return false;
break;
}
$target_image = imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图
imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $imgWidth, $imgHeight, $source_info[0], $source_info[1]);
//保存图片到本地
$dir = '../'.$target_path. '/'. date("Ymd") . '/';
if (!is_dir($dir)) {
mkdir($dir, 0777);
} $fileName = $dir.date("YmdHis").uniqid().'.jpg';
if(!imagejpeg($target_image,'./'.$fileName)){
$fileName = '';
}
imagedestroy($target_image);
return $fileName;
}

2、按照比例裁剪图片

/**
* 图像裁剪
* @param $title string 原图路径
* @param $content string 需要裁剪的宽
* @param $encode string 需要裁剪的高
* @param $target_path string 需要保存的路径
*/
function image_cropper($source_path, $target_width, $target_height, $target_path)
{
$source_info = getimagesize($source_path);
$source_width = $source_info[0];
$source_height = $source_info[1];
$source_mime = $source_info['mime'];
$source_ratio = $source_height / $source_width;
$target_ratio = $target_height / $target_width; if ($source_ratio > $target_ratio) // 源图过高
{
$cropped_width = $source_width;
$cropped_height = $source_width * $target_ratio;
$source_x = 0;
$source_y = ($source_height - $cropped_height) / 2; }elseif ($source_ratio < $target_ratio){ // 源图过宽 $cropped_width = $source_height / $target_ratio;
$cropped_height = $source_height;
$source_x = ($source_width - $cropped_width) / 2;
$source_y = 0;
}else{ // 源图适中 $cropped_width = $source_width;
$cropped_height = $source_height;
$source_x = 0;
$source_y = 0;
} switch ($source_mime)
{
case 'image/gif':
$source_image = imagecreatefromgif($source_path);
break; case 'image/jpeg':
$source_image = imagecreatefromjpeg($source_path);
break; case 'image/png':
$source_image = imagecreatefrompng($source_path);
break; default:
return false;
break;
} $target_image = imagecreatetruecolor($target_width, $target_height);
$cropped_image = imagecreatetruecolor($cropped_width, $cropped_height); // 裁剪
imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
// 缩放
imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height); //保存图片到本地(两者选一)
$dir = '../../'.$target_path. '/'. date("Ymd") . '/';
if (!is_dir($dir)) {
mkdir($dir, 0777);
} $fileName = $dir.date("YmdHis").uniqid().'.jpg';
if(!imagejpeg($target_image,'./'.$fileName)){
$fileName = '';
}
imagedestroy($target_image);
return $fileName;
}

PHP 图片操作(按照指定尺寸压缩,按照比例裁剪)的更多相关文章

  1. 织梦dedecms将指定图片自动生成指定尺寸的小图、缩略图、图片的方法

    对于普通企业网站来讲,织梦原来的程序只是提供了一个缩略图,但是这样对于一些相对来说图片会比较多的网站来说,图片太大当缩略图会导致网站整体的访问速度,所以我今天就来教你织梦把一张大图转换成生成一张小图或 ...

  2. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  3. java图片压缩工具类(指定压缩大小)

    1:先导入依赖 <!--thumbnailator图片处理--> <dependency> <groupId>net.coobird</groupId> ...

  4. Android应用程序开发之图片操作(二)——工程图片资源的加载及OOM的处理

    (一)工程图片资源的加载方法 在Android应用程序开发之图片操作(一)中,详细说明了如何操作各种资源图片,只是有的没有附上示例代码,在此,我将针对项目工程中的图片资源的显示加载进行说明.官方说明, ...

  5. Android应用程序开发之图片操作(一)——Bitmap,surfaceview,imageview,Canvas

    Android应用程序开发之图片操作(一)——Bitmap,surfaceview,imageview,Canvas   1,Bitmap对象的获取 首先说一下Bitmap,Bitmap是Androi ...

  6. media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面

    一.media ''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务 ...

  7. PHP图片操作

    <?php $filename="http://pic.nipic.com/2007-12-06/2007126102233577_2.jpg";//图片地址//获取图片信息 ...

  8. C#图片操作公共库

    存一下,以后找起来方便 包括图片加载.压缩.base64等 public static class ImageFun { #region 图片 public static EncoderParamet ...

  9. C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

    本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码.网上文章大多只是简单介绍内置参数的设置,根据我的使用目的,增加了自定义目标二维码图片尺寸和白边 ...

随机推荐

  1. openvas-tutorial-for-beginners

    https://jonathansblog.co.uk/openvas-tutorial-for-beginners

  2. <2013 07 29> 游泳

    7月12日,在巴塞罗那的海滩学会用狗刨式游泳. 7月14日,在尼斯-戛纳海滩继续练习,稍式蛙泳仰泳. 7月28日,在慕尼黑某湖边吃烧烤,下湖练习. 7月29日,在慕尼黑奥林匹克游泳馆学会了仰泳,稍试自 ...

  3. C语言结构体数组内带字符数组初始化和赋值

    1.首先定义结构体数组: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char c ...

  4. resetForm(name1,name2)-我的JavaScript函数库-mazey.js

    重置表单输入值为原始(空)状态. 参数:name1,name2,name3...NAME属性,可以多个. function resetForm(){ for(var i = 0; i < arg ...

  5. Linux下修改密码复杂度

    在linux,设置密码复杂度的方法有几个1. 一个是在/etc/login.defs文件,里面几个选项PASS_MAX_DAYS 90 #密码最长过期天数PASS_MIN_DAYS 80 #密码最小过 ...

  6. 解决Vue的表格中,expand只有某些行需要展开的问题。

    element UI里的表格里,type="expand"的话,所有行都有展开的选项,然而实际中有些行根据判断不需要展开,而element目前对这个问题还不是很友好,现在有个可以通 ...

  7. Python报错——module 'scipy.misc' has no attribute 'imresize'

    报错是因为要安装PIL库,库名现在为Pillow,在命令行上安装即可: pip3 install Pillow

  8. Java基础—序列化与反序列化(转载)

    转载自: Java序列化与反序列化 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化 ...

  9. 20170421 F110 常见问题

    F110常見問題以及處理方式 1. Vendor中沒有與F110中相同的Payment method 解決辦法: 在Vendor主檔中維護Payment method 2. 結報被Block 解決辦法 ...

  10. 20170405-STO库存转储单

    1.工厂间转储: (1)MB1B 移动类型 301 工厂到工厂(一步)转账,->简单明了一步转储过账后会产生 GR,MITA增加了,MIZH减少了,MB03, **会产生 GR,如果俩工厂 标准 ...