当前位置:  编程技术>php

php图片裁剪与缩放方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:  一般图片裁剪有2种方式: 第一种是等比例缩放成指定尺寸,例如前台展示区域需要200*200尺寸的图片,而原图是600*300,这时首先先创建一个200*200的白底空白图片,然后先算出原图的宽高比例,如果宽高都小于200,那么我们就直...

一般图片裁剪有2种方式:

第一种是等比例缩放成指定尺寸,例如前台展示区域需要200*200尺寸的图片,而原图是600*300,这时首先先创建一个200*200的白底空白图片,然后先算出原图的宽高比例,如果宽高都小于200,那么我们就直接使用原图,否则那就以宽高中值大的那个作为基础,利用宽高比计算出值小的那个对应的尺寸。(www.)

这里因为300、600都比200大,所以以600为基础,将宽设置成200,这样通过2:1的比例可以得到高为100,即将原图缩放成200*100图片不会变形,这样可以通过imagecopyresampled函数将600*300的原图缩放成200*100的图片覆盖到200*200的白色底图上。

优点:图片等比例缩放不变形,能完全反应出图片的内容;
缺点:由于原图的比例不可能全部和需要的尺寸比例一致,会导致左右或者上下出现白色底图的区域。

代码核心部分:
 

代码示例:
/* 检查原始文件是否存在及获得原始文件的信息 */ 
 $org_info = @getimagesize($img);     
 $img_org = $this->img_resource($img, $org_info[2]); 
 
 /* 原始图片以及缩略图的尺寸比例 */ 
 $scale_org      = $org_info[0] / $org_info[1]; 
 /* 处理只有缩略图宽和高有一个为0的情况,这时背景和缩略图一样大 */ 
 if ($thumb_width == 0 && $thumb_height == 0) { 
     $thumb_width = $org_info[0]; 
     $thumb_height = $org_info[1]; 
 } else { 
     if ($thumb_width == 0) 
     { 
  $thumb_width = $thumb_height * $scale_org; 
     } 
     if ($thumb_height == 0) 
     { 
  $thumb_height = $thumb_width / $scale_org; 
     } 
 } 
  
 /* 创建缩略图的标志符 */ 
 if ($gd == 2) 
 { 
     $img_thumb  = imagecreatetruecolor($thumb_width, $thumb_height); 
 } 
 else 
 { 
     $img_thumb  = imagecreate($thumb_width, $thumb_height); 
 } 
 
 $clr = imagecolorallocate($img_thumb, 255, 255, 255); 
 imagefilledrectangle($img_thumb, 0, 0, $thumb_width, $thumb_height, $clr); 
 
 if ($org_info[0] / $thumb_width > $org_info[1] / $thumb_height) 
 { 
     $lessen_width  = $thumb_width; 
     $lessen_height  = $thumb_width / $scale_org; 
 } 
 else 
 { 
     /* 原始图片比较高,则以高度为准 */ 
     $lessen_width  = $thumb_height * $scale_org; 
     $lessen_height = $thumb_height; 
 } 
 
 $dst_x = ($thumb_width  - $lessen_width)  / 2; 
 $dst_y = ($thumb_height - $lessen_height) / 2; 
 
 /* 将原始图片进行缩放处理 */ 
 if ($gd == 2) 
 { 
     imagecopyresampled($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $lessen_height, $org_info[0], $org_info[1]); 
 } 
 else 
 { 
     imagecopyresized($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $lessen_height, $org_info[0], $org_info[1]); 
 } 
 

第二种就是那种不想出现白边,直接从原图上切下来指定的宽高进行使用。这种方式可以分为方位模式和定点模式,方位模式可根据顶端、中端、底端的左中右方位分为9个点作为切割的起点,而定点模式由用户定义切割的起点。此种方式也是先创建指定大小的白图作为画幕,(www.)再利用函数imagecopy在原图上切割出指定大小以及位置的图片,再次用imagecopyresampled函数将切割下来的图片盖到画幕上。

优点:
基本能保证图片不会出现白色底图区域,整个图片空间能被原图的内容充满;
缺点:致命的缺点,缩略图不能完全反应出原图的内容,例如有些人物图像,若按照顶部左侧作为切割起点的话,就会可能出现只有半边脸的情况。
所以,选择2种模式时,需要根据自己的实际需求来进行。

核心代码:
 

代码示例:
$img_org = $this->img_resource($img, $org_info[2]); 
 
 /* 缩略图的尺寸比例 */ 
 $scale_org      = $thumb_width / $thumb_height;
 /* 创建缩略图的标志符 */ 
 if ($gd == 2) 
 { 
     $img_thumb  = imagecreatetruecolor($thumb_width, $thumb_height); 
 } 
 else 
 { 
     $img_thumb  = imagecreate($thumb_width, $thumb_height); 
 } 
 
 $clr = imagecolorallocate($img_thumb, 255, 255, 255); 
 imagefilledrectangle($img_thumb, 0, 0, $thumb_width, $thumb_height, $clr); 
  
 /* 计算剪切图片的宽度和高度 */ 
 $mid_width = ($org_info[0] < $thumb_width) ? $org_info[0] : $thumb_width; 
 $mid_height = ($org_info[1] < $thumb_height) ? $org_info[1] : $thumb_height; 
 // 为剪切图像创建背景画板 
 $mid_img = imagecreatetruecolor($mid_width, $mid_height); 
 //拷贝剪切的图像数据到画板,生成剪切图像 
 imagecopy($mid_img, $img_org, 0, 0, 0, 0, $mid_width, $mid_height); 
 /* 将原始图片进行缩放处理 */ 
 if ($gd == 2) 
 { 
     imagecopyresampled($img_thumb, $mid_img, 0, 0, 0, 0, $thumb_width, $thumb_height, $mid_width, $mid_height); 
 } 
 else 
 { 
     imagecopyresized($img_thumb, $mid_img, 0, 0, 0, 0, $thumb_width, $thumb_height, $mid_width, $mid_height); 
 } 
您可能感兴趣的文章:
  • PHP图片裁剪函数(图像不变形)
  • php图片裁剪与缩略图示例
  • PHP如何裁剪图片成固定大小
  • PHP等比例缩放图片生成缩略图函数的例子
  • php实现图片缩放效果
  • PHP上传图片等比缩放(示例)
  • php缩放图片的实例代码
  • php等比例缩放图片的示例参考
  • php批量缩放图片的代码举例

    
 
 

您可能感兴趣的文章:

  • php gd库实现服务端图片裁剪与缩略图
  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
  • php图片裁剪与缩略图示例
  • php与jcrop图片裁剪插件实现图片裁切的例子
  • php图片裁剪 Tclip
  • Nginx下php如何动态裁剪图片
  • php结合nginx实现动态裁剪图片
  • PHP加Nginx实现动态裁剪图片方案
  • PHP图片裁剪函数(图像不变形)
  • PHP图片裁剪函数(保持图像不变形)
  • PHP如何裁剪图片成固定大小
  • php使用imagick模块实现图片缩放、裁剪、压缩示例
  • php实现图片缩放效果
  • php实现图片缩放功能类
  • php缩放图片的实例代码
  • php图片缩放实现方法
  • PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
  • PHP图片等比例缩放生成缩略图函数分享
  • PHP等比例缩放图片生成缩略图函数的例子
  • php与js对数据库图片等比缩放的代码
  • PHP上传图片等比缩放(示例)
  • PHP上传图片进行等比缩放可增加水印功能
  • PHP图片等比缩放类SimpleImage使用方法和使用实例分享
  • php多功能图片处理类分享(php图片缩放类)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php5中当浏览器禁用cookie时保持会话session的方法
  • 判断php数组维度(php数组长度)的方法
  • PHP编程语言介绍及安装测试方法
  • 图解找出PHP配置文件php.ini的路径的方法
  • php类声明和php类使用方法示例分享
  • windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
  • 查找php配置文件php.ini所在路径的二种方法
  • php定义数组和使用示例(php数组的定义方法)
  • PHP质数计算三种方法 php求100以内的质数
  • PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
  • php反射机制获取php类的所有方法
  • iis加载不到php.ini的解决方法
  • php跨域cookie共享使用方法
  • 两种设置php载入页面时编码的方法
  • PHP等比例缩放图片生成缩略图函数的例子 iis7站长之家
  • PHP exif扩展方法开启详解
  • php出现Class 'XsltProcessor' not found问题的解决方法
  • windows下开启PHP GD库的方法
  • php判断闰年的三种方法(闰年计算方法)
  • php向js函数传参的几种方法
  • php检测iis环境是否支持htaccess的方法
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3