首頁 php教程 php手册 php使用imagick模块实现图片缩放、裁剪、压缩示例

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

Jun 06, 2016 pm 08:23 PM
圖片縮放

这篇文章主要介绍了php使用imagick模块实现图片缩放、裁剪、压缩示例,需要的朋友可以参考下

PHP 使用Imagick模块 缩放,,裁剪,压缩图片 包括gif图片

缩放 裁剪

复制代码 代码如下:


/**
  * 图片裁剪
  * 裁剪规则:
  *   1. 高度为空或为零   按宽度缩放 高度自适应
  *   2. 宽度为空或为零  按高度缩放 宽度自适应
  *      3. 宽度,高度到不为空或为零  按宽高比例等比例缩放裁剪  默认从头部居中裁剪
  * @param number $width
  * @param number $height
  */
 public function resize($width=0, $height=0){
  if($width==0 && $height==0){
   return;
  }

  $color = '';// 'rgba(255,255,255,1)';
  $size = $this->image->getImagePage ();
  //原始宽高
  $src_width = $size ['width'];
  $src_height = $size ['height'];

  //按宽度缩放 高度自适应
  if($width!=0 && $height==0){
   if($src_width>$width){
    $height = intval($width*$src_height/$src_width);

    if ($this->type == 'gif') {
     $this->_resizeGif($width, $height);
    }else{
     $this->image->thumbnailImage ( $width, $height, true );
    }
   }
   return;
  }
  //按高度缩放 宽度自适应
  if($width==0 && $height!=0){
   if($src_height>$height){
    $width = intval($src_width*$height/$src_height);

    if ($this->type == 'gif') {
     $this->_resizeGif($width, $height);
    }else{
     $this->image->thumbnailImage ( $width, $height, true );
    }
   }
   return;
  }

  //缩放的后的尺寸
  $crop_w = $width;
  $crop_h = $height;

  //缩放后裁剪的位置
  $crop_x = 0;
  $crop_y = 0;

  if(($src_width/$src_height)    //宽高比例小于目标宽高比例  宽度等比例放大      按目标高度从头部截取
   $crop_h = intval($src_height*$width/$src_width);
   //从顶部裁剪  不用计算 $crop_y
  }else{
   //宽高比例大于目标宽高比例   高度等比例放大      按目标宽度居中裁剪
   $crop_w = intval($src_width*$height/$src_height);
   $crop_x = intval(($crop_w-$width)/2);
  }

  if ($this->type == 'gif') {
   $this->_resizeGif($crop_w, $crop_h, true, $width, $height,$crop_x, $crop_y);
  } else {
   $this->image->thumbnailImage ( $crop_w, $crop_h, true );
   $this->image->cropImage($width, $height,$crop_x, $crop_y);
  }
 }

针对gif图片的处理方法

复制代码 代码如下:


/**
  * 处理gif图片 需要对每一帧图片处理
  * @param unknown $t_w  缩放宽
  * @param unknown $t_h  缩放高
  * @param string $isCrop  是否裁剪
  * @param number $c_w  裁剪宽
  * @param number $c_h  裁剪高
  * @param number $c_x  裁剪坐标 x
  * @param number $c_y  裁剪坐标 y
  */
 private function _resizeGif($t_w, $t_h, $isCrop=false, $c_w=0, $c_h=0, $c_x=0, $c_y=0){
  $dest = new Imagick();
  $color_transparent = new ImagickPixel("transparent"); //透明色
  foreach($this->image as $img){
   $page = $img->getImagePage();
   $tmp = new Imagick();
   $tmp->newImage($page['width'], $page['height'], $color_transparent, 'gif');
   $tmp->compositeImage($img, Imagick::COMPOSITE_OVER, $page['x'], $page['y']);

   $tmp->thumbnailImage ( $t_w, $t_h, true );
   if($isCrop){
    $tmp->cropImage($c_w, $c_h, $c_x, $c_y);
   }

   $dest->addImage($tmp);
   $dest->setImagePage($tmp->getImageWidth(), $tmp->getImageHeight(), 0, 0);
   $dest->setImageDelay($img->getImageDelay());
   $dest->setImageDispose($img->getImageDispose());

  }
  $this->image->destroy ();
  $this->image = $dest;
 }

保存时压缩处理

复制代码 代码如下:


// 保存到指定路径
 public function save_to($path) {
  //压缩图片质量
  $this->image->setImageFormat('JPEG');
  $this->image->setImageCompression(Imagick::COMPRESSION_JPEG);
  $a = $this->image->getImageCompressionQuality() * 0.60;
  if ($a == 0) {
   $a = 60;
  }
  $this->image->setImageCompressionQuality($a);
  $this->image->stripImage();

  if ($this->type == 'gif') {
   $this->image->writeImages ( $path, true );
  } else {
   $this->image->writeImage ( $path );
  }
 }

ImagickService.php

复制代码 代码如下:

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

JavaScript 如何實作圖片縮圖功能? JavaScript 如何實作圖片縮圖功能? Oct 25, 2023 am 08:56 AM

JavaScript如何實作圖片縮圖功能?當我們在網頁中展示圖片時,有時候需要將原始的大圖進行縮小,以適應頁面的佈局需求,這就需要用到圖片縮圖功能。在JavaScript中,我們可以透過以下幾種方法來實現圖片的縮圖功能:使用HTML直接設定圖片的寬度和高度最簡單的方式就是直接在HTML中設定圖片的寬度和高度屬性來實現縮圖效果。例如:&l

如何使用CSS實現圖片的縮放效果 如何使用CSS實現圖片的縮放效果 Nov 21, 2023 pm 04:17 PM

如何使用CSS實現圖片的縮放效果在網頁設計中,圖片的縮放效果是常見的需求之一。透過CSS的相關屬性和技巧,我們可以輕鬆地實現圖片的縮放效果。下面,將為大家詳細介紹如何使用CSS來實現圖片的縮放效果,並給出具體的程式碼範例。使用transform屬性實作圖片的矩陣縮放transform屬性允許我們透過旋轉、縮放、傾斜或平移元素來進行變換。其中,縮放變換就是實現圖片

Vue 中如何實現圖片縮放以及放大鏡效果? Vue 中如何實現圖片縮放以及放大鏡效果? Jun 25, 2023 pm 07:32 PM

Vue中如何實現圖片縮放以及放大鏡效果?隨著Web技術的不斷發展,使用者對於網站上的圖片展示效果要求也越來越高。其中,圖片縮放以及放大鏡效果是比較常見的需求。在Vue中實現圖片的縮放以及放大鏡效果相對來說比較簡單,接下來我將詳細介紹具體實作方法。一、基礎方法首先,讓我們來看看如何實現基礎的圖片縮放效果。實作方法簡單,只需要使用Vue的內建指令

如何使用HTML、CSS和jQuery實現圖片縮放的進階功能 如何使用HTML、CSS和jQuery實現圖片縮放的進階功能 Oct 25, 2023 am 09:07 AM

如何使用HTML、CSS和jQuery實現圖片縮放的高階功能引言:在現代網頁設計中,圖片的美觀和適應性非常重要。然而,常規的圖片展示往往無法滿足我們的需求。在本文中,我們將介紹如何使用HTML、CSS和jQuery來實作一些進階的圖片縮放功能。透過這些技術,我們可以實現自訂的圖片縮放效果,並為我們的網頁增加更多的互動性。步驟1:HTML標記首先,我們需要一

使用PHP和GD庫實現圖片縮放的最佳方法 使用PHP和GD庫實現圖片縮放的最佳方法 Jul 12, 2023 pm 08:07 PM

使用PHP和GD庫實現圖片縮放的最佳方法近年來,隨著互聯網的普及,圖片處理成為了許多網站必備的功能之一。而圖片縮放作為圖片處理中最常見的需求之一,需要能夠在不損失圖片品質的前提下,按比例縮放圖片大小,以適應不同的顯示需求。 PHP作為一種常見的伺服器端程式語言,擁有豐富的影像處理函式庫,其中最常用的是GD函式庫。 GD庫提供了一個簡單而強大的接口,可以用來處理各種圖像操

如何使用PHP開發簡單的圖片縮放和裁剪功能 如何使用PHP開發簡單的圖片縮放和裁剪功能 Sep 21, 2023 am 10:28 AM

如何使用PHP開發簡單的圖片縮放和裁剪功能摘要:圖片處理在Web開發中是一個常見的需求,本文將介紹如何使用PHP開發簡單的圖片縮放和裁剪功能,並提供具體的程式碼範例。透過本文的學習,讀者可以了解如何使用PHP在Web應用中實現對圖片的基本處理功能。一、背景介紹在Web開發中,有時候我們需要對圖片進行縮放或裁剪,以適應不同的頁面佈局或滿足特定需求。 PHP作為

CSS Positions佈局實現圖片縮放的技巧 CSS Positions佈局實現圖片縮放的技巧 Sep 26, 2023 pm 02:17 PM

CSSPositions佈局實現圖片縮放的技巧在網頁設計中,圖片的縮放是常見的需求之一。透過CSSPositions佈局,我們可以實現圖片的縮放效果,為網頁增添更好的視覺體驗。本文將介紹一些技巧,並給出具體的程式碼範例。使用position屬性設定圖片的位置:在CSS中,可以使用position屬性來定義元素的定位方式。透過設定position屬性為"re

利用CSS實現圖片氣泡特效的技巧與方法 利用CSS實現圖片氣泡特效的技巧與方法 Oct 18, 2023 pm 12:24 PM

利用CSS實現圖片氣泡特效的技巧與方法在網頁設計中,為圖片添加特效是提升使用者體驗的重要方法之一。其中,圖片氣泡特效可以為圖片增添趣味性和互動性,讓網頁內容更加吸引人。本文將分享一些利用CSS實現圖片氣泡特效的技巧和方法,並附帶具體的程式碼範例。使用偽類元素創建氣泡效果透過使用CSS的偽類元素,我們可以實現在圖片上方添加一個氣泡的效果。具體的方法是透過設定偽類元

See all articles