PHP图片裁剪与缩放示例(无损裁剪图片)

本文介绍了PHP图片裁剪与缩放示例,废话不多少,具体代码如下:

/*

 *exif_imagetype -- 判断一个图像的类型

 *功能说明:函数功能是把一个图像裁剪为任意大小的图像,并保持图像不变形

 *参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高

 */

// 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白

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比例的临时图像

    // 定义一个新的图像

    $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('test.jpg', 'demo.jpg', '1200px', '1200px');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • php实现按指定大小等比缩放生成上传图片缩略图的方法

    本文实例讲述了php实现按指定大小等比缩放生成上传图片缩略图的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /**  * *  *等比缩放  * @param unknown_type $srcImage   源图片路径  * @param unknown_type $toFile     目标图片路径  * @param unknown_type $maxWidth   最大宽  * @param unknown_type $maxHeight  最大高  * @par

  • 如何实现php图片等比例缩放

    通过文章给出的源代码可实现针对图片的等比缩放生成缩略图的功能,非常实用的技巧哦. 新建文件index.php,需要在统计目录下有个图片为pic.jpg(可根据源码进行更改图片的名称) 源代码如下: <?php $filename="pic.jpg"; $per=0.3; list($width, $height)=getimagesize($filename); $n_w=$width*$per; $n_h=$height*$per; $new=imagecreatetrueco

  • php缩放图片(根据宽高的等比例缩放)实例介绍

    推荐一个简单实用的缩放图片工具 SimpleImage,参考http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/ 使用方法: 设定宽高,不等比例缩放 复制代码 代码如下: <?php include('SimpleImage.php'); $image = new SimpleImage(); $image->load('picture.jpg'); $image->resize(250,400); $i

  • PHP中图片等比缩放的实例

    复制代码 代码如下: <?php      //图片的等比缩放 //因为PHP只能对资源进行操作,所以要对需要进行缩放的图片进行拷贝,创建为新的资源      $src=imagecreatefromjpeg('a.jpg'); //取得源图片的宽度和高度      $size_src=getimagesize('a.jpg');      $w=$size_src['0'];      $h=$size_src['1']; //指定缩放出来的最大的宽度(也有可能是高度)      $max=3

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

    PHP 使用Imagick模块 缩放,裁剪,压缩图片 包括gif图片 缩放 裁剪 复制代码 代码如下: /**  * 图片裁剪  * 裁剪规则:  *   1. 高度为空或为零   按宽度缩放 高度自适应  *   2. 宽度为空或为零  按高度缩放 宽度自适应  *      3. 宽度,高度到不为空或为零  按宽高比例等比例缩放裁剪  默认从头部居中裁剪  * @param number $width  * @param number $height  */ public function

  • php图片缩放实现方法

    php基础练习--图片缩放: 复制代码 代码如下: <?php    /**    * image zoom.    */    function imageZoom($filename, $w, $h) {        /* Arguments meaning */        /* $filename: the source of the name */        /* $w: you want get the image's width */        /* $h: you w

  • php实现图片缩放功能类

    复制代码 代码如下: <?php /** *  Images类是一个图片处理类 *  @package application.controllers  *  @since 1.0  */class Images { /**  * 缩放图片  * @param $source原图片  * @param $newfile新图片  * @param $pre缩放比例  */ public function thumn($source,$pre,$newfile) {     //获取图片尺寸  li

  • PHP图片处理之使用imagecopyresampled函数实现图片缩放例子

    网站优化不能只定在代码上,内容也是网站最需要优化的对象之一,而图像又是网站中最主要的内容.图像的优化最需要处理的就是将所有上传到网站中的大图片自动缩放称小图(在网页中大小够用就行),以减少N倍的存储空间,并提高下载浏览的速度.所以图片缩放成一个动态网站必须要处理的任务,经常和文件上传绑定在一起工作,能在上传图片的同时就调整其大小.当然有时也需要单独处理图片缩放,例如在做图片列表时,如果直接用大图而在显示时才将其缩放成小图,这样做不仅下载速度会变慢,也会降低页面响应时间.通常遇到这样的应用都是在上

  • php图片的裁剪与缩放生成符合需求的缩略图

    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理. 图片源与需要的大小: 复制代码 代码如下: $src_img = "wallpaper.jpg"; $dst_w = 300; $dst_h = 200; 剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小. 一开始采用了 imagecopyre

  • PHP图片等比例缩放生成缩略图函数分享

    复制代码 代码如下: <?php    /*    *@im     //需要缩放的图片资源    *@filetype //制作的缩略图文件类型    *@dstimW   //缩放的图片的宽度    *@dstimH  //缩放的图片的高度    *@thumbname //缩略图文件名字function makethumb($im,$dstimW,$dstimH,$thumbname ,$filetype){            //获取im的宽度和高度        $pic_W=im

随机推荐