<?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. (转)漫谈MySql中的事务

    最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...

  2. js 图片区域可点击,适配移动端,图片大小随意改变

    实现图片区域可点击,实际上使用map是可以的,但是适配效果并不好,图片只能是固定大小的值,而且点都被写死了. 在这里,我使用的js基于canvas写的一个小工具.可以圈出你需要点击的部分,然后生成一串 ...

  3. CentOS6.5安装Kibana5.3.0

    1.写在安装之前,安装Kibana之前需要先安装Elasticsearch,为了安装时不出错,建议选择这两者选择一样的版本,本文全部选择5.3版本. 2.首先到官网下载安装包: https://art ...

  4. ####### Scripts Summary #######

    Scripts Summary Version: 1.0.1 issueDate: 2017-11-11 modifiedDate: 2017-11-28 0.configuration 1.oper ...

  5. mybatis运行原理

    mybatis运行原理 运行过程中涉及到的类或者接口 Resources(c) :用于加载mybatis核心配置文件 XMLConfigBuilder(c) :用于解析xml文件(核心配置文件) Co ...

  6. HTML5中的audio在手机端和 微信端的自动播放

    再做H5页面的时候,发现audio在手机端和微信端添加了autoplay以后还是不可以自动播放,这是因为手机端为了节约流浪所设置的 通常解决方法是给一个交互事件,一定要是交互事件 标签:<aud ...

  7. MyBatis基础入门《四》接口方式.Select查询集合

    MyBatis基础入门<四>接口方式.Select查询集合 描述: 在<MyBatis基础入门<二>Select查询>中有说过,SQLSession有两种用法,这里 ...

  8. maven下载和安装

    注意:安装Maven3之前需要安装jdk1.7以上版本,下面介绍的是最新版Maven官网下载并安装, 每个人使用的编辑器不同,在这里我就不介绍了,可以去网上查对应编辑器Maven配置方法. 第一步,官 ...

  9. caffe-ssd的GPU安装时make runtest报错: BatchReindexLayerTest/3.TestGradient, where TypeParam = caffe::GPUDevice<double>

    报错原因:装了两个cuda,BatchReindexLayerTest/3.TestGradient不能确定用那个 解决办法1:删除其中一个(最好删除9.1,TensorFlow支持的是9.0,为了后 ...

  10. caffe的运行create_data.sh前对VOC2007图片格式的更改

    运用caffe进行深度学习之前需要对图片进行预处理,将图片的大小,格式等进行修改 将300*300的图片改为256*256格式 则将以下参数改为: min_dim=256 max_dim=256 wi ...