<?php
/*
*exif_imagetype -- 判断一个图像的类型
*功能说明:函数功能是把一个图像裁剪为任意大小的图像,并保持图像不变形
*参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高
*/ /* *
* exif_imagetype函数遇到Call to undefined function exif_imagetype问题
* 把php.ini里面的extension=php_exif.dll取消掉注释,extension=php_mbstring.dll 必须放在它的前面且去掉释义符";"
* */ // 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白
function image_resize($src_file, $dst_file, $new_width, $new_height)
{
$new_width = intval($new_width); $new_height = intval($new_width); if ($new_width < 1 || $new_height < 1)
{
echo "params width or height error !";
exit();
} if (!file_exists($src_file))
{
echo $src_file . " is not exists !";
exit();
} // 图像类型
$type = exif_imagetype($src_file); $support_type = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF); if (!in_array($type, $support_type, true))
{ echo "this type of image does not support! only support jpg , gif or png";
exit();
} //Load image switch($type)
{
case IMAGETYPE_JPEG : $src_img = imagecreatefromjpeg($src_file); break; case IMAGETYPE_PNG : $src_img = imagecreatefrompng($src_file); break; case IMAGETYPE_GIF : $src_img = imagecreatefromgif($src_file); break; default :
echo "Load image error!"; exit();
} $w = imagesx($src_img); $h = imagesy($src_img); $ratio_w = 1.0 * $new_width / $w; $ratio_h = 1.0 * $new_height / $h; $ratio = 1.0; // 生成的图像的高宽比原来的都小,或都大 ,原则是 取大比例放大,取大比例缩小(缩小的比例就比较小了) if (($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1))
{ if ($ratio_w < $ratio_h) { $ratio = $ratio_h; // 情况一,宽度的比例比高度方向的小,按照高度的比例标准来裁剪或放大 } else { $ratio = $ratio_w; } // 定义一个中间的临时图像,该图像的宽高比 正好满足目标要求 $inter_w = (int)($new_width / $ratio); $inter_h = (int)($new_height / $ratio); $inter_img = imagecreatetruecolor($inter_w, $inter_h); //var_dump($inter_img); imagecopy($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h); // 生成一个以最大边长度为大小的是目标图像$ratio比例的临时图像
// 定义一个新的图像
ini_set ('memory_limit', '8M'); //更改PHP的内存限制
$new_img = imagecreatetruecolor($new_width, $new_height); //var_dump($new_img);exit();
imagecopyresampled($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height, $inter_w, $inter_h); switch($type)
{
case IMAGETYPE_JPEG : // 存储图像
imagejpeg($new_img, $dst_file, 100); break; case IMAGETYPE_PNG : imagepng($new_img, $dst_file, 100); break; case IMAGETYPE_GIF : imagegif($new_img, $dst_file, 100); break; default : break;
} }// end if 1 // 2 目标图像 的一个边大于原图,一个边小于原图 ,先放大平普图像,然后裁剪 // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) ) else { $ratio = $ratio_h > $ratio_w ? $ratio_h : $ratio_w; //取比例大的那个值 // 定义一个中间的大图像,该图像的高或宽和目标图像相等,然后对原图放大 $inter_w = (int)($w * $ratio); $inter_h = (int)($h * $ratio); $inter_img = imagecreatetruecolor($inter_w, $inter_h); //将原图缩放比例后裁剪 imagecopyresampled($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h, $w, $h); // 定义一个新的图像 $new_img = imagecreatetruecolor($new_width, $new_height); imagecopy($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height); switch($type)
{
case IMAGETYPE_JPEG : // 存储图像
imagejpeg($new_img, $dst_file, 100); break; case IMAGETYPE_PNG : imagepng($new_img, $dst_file, 100);
break; case IMAGETYPE_GIF : imagegif($new_img, $dst_file, 100); break; default : break;
} }// if3 }// end function
//输出新图片
image_resize('491235.jpg', 'demo.jpg', '120px', '120px');

PHP图片裁剪与缩放示例(无损裁剪图片)的更多相关文章

  1. 【转】微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应

    原文[https://blog.csdn.net/qq_31383345/article/details/53127804] 早上在论坛上看到有人写了关于图片等比例缩放的文章,只是判断了图片宽是否大于 ...

  2. 微信小程序学习点滴《十二》:图片等比例缩放 获取屏幕尺寸图片尺寸 自适应

    原文:http://www.wxapp-union.com/portal.php?mod=view&aid=360 早上在论坛上看到有人写了关于图片等比例缩放的文章,只是判断了图片宽是否大于屏 ...

  3. 微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应

    wxml: <image style="width: {{imagewidth}}px; height: {{imageheight}}px;"  src="{{i ...

  4. PHP图片裁剪与缩放 / 无损裁剪图片

    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到 ...

  5. 黄聪:C#图片处理封装类(裁剪、缩放、清晰度、加水印、生成缩略图)有示例(转)

    C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...

  6. php使用imagick模块实现图片缩放、裁剪、压缩示例

    PHP 使用Imagick模块 缩放,裁剪,压缩图片 包括gif图片 缩放 裁剪 复制代码代码如下: /**  * 图片裁剪  * 裁剪规则:  *   1. 高度为空或为零   按宽度缩放 高度自适 ...

  7. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

  8. iOS裁剪,缩放图片白边问题解决办法

    几年没来了,感觉还是要写点啥,以后碰见问题 解决就写这吧,当是一个随时的笔记也好. iOS裁剪,缩放图片的代码网上也很多了,但是笔者出现了右边和下边出现白边的情况.出现白边的原因是给的size中的CG ...

  9. Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理

    前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API ...

随机推荐

  1. 微信小程序中this使用

    微信小程序中,在wx.request({});方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报 ...

  2. dblink连接操作远程数据库

    在一个数据库中需要操作远程数据库时,需要创建远程数据库的连接. 连接代码如下: create public database link 连接名 connect to 远程数据库用户名 identifi ...

  3. WireShark过滤器选项

    首先说几个最常用的关键字,"eq" 和 "=="等同,可以使用 "and" 表示并且,"or"表示或者."!& ...

  4. nodejs+mysql入门实例(增)

    var userAddSql = 'INSERT INTO userinfo(id,username,pwd) VALUES(0,?,?)'; var userAddSql_Params = ['Wi ...

  5. Java Selenium - 元素操作 (三)

    接上一篇,我们依然以京东的网站做示例. 三,单选项 下面来做这样一条case: 1. 登录京东旅行网页. 2. 在国内机票板块,购买从北京到武汉的往返机票,时间为明天出发,一周后返回. 3.搜索机票. ...

  6. js使用的一些实用技巧

    1.jquery中页面定时调用ajax方法 function SetContinueSend(param1,param2, func){ func.call(null,param1,param2) } ...

  7. Entity Framework(Fluent API)

    一.概述 Fluent API 可以理解为一种从POCO到数据库的映射约定,包括字段长度,类型,主外键等等,在EF Code First进行开发时候经常用到. 1.主键 modelBuilder.En ...

  8. Oracle使用rman备份数据库时出现cannot reclaim的错误

    1. 按照<2 day DBA>中的guide,设置fast recovery area. SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_S ...

  9. Springboot杂七杂八

    1 加载配置文件 private static ResourceBundle resb = ResourceBundle.getBundle("serverInfo"); 然后在r ...

  10. [openjudge-搜索]哆啦A梦的时光机

    题目描述 描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿 ...