首頁 後端開發 php教程 php生成缩略图,加水印种

php生成缩略图,加水印种

Jun 13, 2016 pm 01:02 PM
height return width

php生成缩略图,加水印类

这个一个简单的GD库操作

<?php /****
 燕十八 公益PHP讲堂

 论  坛: http://www.zixue.it
 微  博: http://weibo.com/Yshiba
 YY频道: 88354001
 ****/

/***
 想操作图片
 先得把图片的大小,类型信息得到

 水印:就是把指定的水印复制到目标上,并加透明效果

 缩略图:就是把大图片复制到小尺寸画面上
 ***/

class ImageTool {
	// imageInfo 分析图片的信息
	// return array()
	public static function imageInfo($image) {
		// 判断图片是否存在
		if (!file_exists($image)) {
			return false;
		}

		$info = getimagesize($image);

		if ($info == false) {
			return false;
		}

		// 此时info分析出来,是一个数组
		$img['width'] = $info[0];
		$img['height'] = $info[1];
		$img['ext'] = substr($info['mime'], strpos($info['mime'], '/') + 1);

		return $img;
	}

	/*
	 加水印功能
	 parm String $dst 等操作图片
	 parm String $water 水印小图
	 parm String $save,不填则默认替换原始图
	 */
	public static function water($dst, $water, $save = NULL, $pos = 2, $alpha = 50) {
		// 先保证2个图片存在
		if (!file_exists($dst) || !file_exists($water)) {
			return false;
		}

		// 首先保证水印不能比待操作图片还大
		$dinfo = self::imageInfo($dst);
		$winfo = self::imageInfo($water);

		if ($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']) {
			return false;
		}

		// 两张图,读到画布上! 但是图片可能是png,可能是jpeg,用什么函数读?
		$dfunc = 'imagecreatefrom' . $dinfo['ext'];
		$wfunc = 'imagecreatefrom' . $winfo['ext'];

		if (!function_exists($dfunc) || !function_exists($wfunc)) {
			return false;
		}

		// 动态加载函数来创建画布
		$dim = $dfunc($dst);
		// 创建待操作的画布
		$wim = $wfunc($water);
		// 创建水印画布

		// 根据水印的位置 计算粘贴的坐标
		switch($pos) {
			case 0 :
				// 左上角
				$posx = 0;
				$posy = 0;
				break;

			case 1 :
				// 右上角
				$posx = $dinfo['width'] - $winfo['width'];
				$posy = 0;
				break;

			case 3 :
				// 左下角
				$posx = 0;
				$posy = $dinfo['height'] - $winfo['height'];
				break;

			default :
				$posx = $dinfo['width'] - $winfo['width'];
				$posy = $dinfo['height'] - $winfo['height'];
		}

		// 加水印
		imagecopymerge($dim, $wim, $posx, $posy, 0, 0, $winfo['width'], $winfo['height'], $alpha);

		// 保存
		if (!$save) {
			$save = $dst;
			unlink($dst);
			// 删除原图
		}

		$createfunc = 'image' . $dinfo['ext'];
		$createfunc($dim, $save);

		imagedestroy($dim);
		imagedestroy($wim);

		return true;
	}

	/**
	 thumb 生成缩略图
	 等比例缩放,两边留白
	 **/
	public static function thumb($dst, $save = NULL, $width = 200, $height = 200) {
		// 首先判断待处理的图片存不存在
		$dinfo = self::imageInfo($dst);
		if ($dinfo == false) {
			return false;
		}

		// 计算缩放比例
		$calc = min($width / $dinfo['width'], $height / $dinfo['height']);

		// 创建原始图的画布
		$dfunc = 'imagecreatefrom' . $dinfo['ext'];
		$dim = $dfunc($dst);

		// 创建缩略画布
		$tim = imagecreatetruecolor($width, $height);

		// 创建白色填充缩略画布
		$white = imagecolorallocate($tim, 255, 255, 255);

		// 填充缩略画布
		imagefill($tim, 0, 0, $white);

		// 复制并缩略
		$dwidth = (int)$dinfo['width'] * $calc;
		$dheight = (int)$dinfo['height'] * $calc;

		$paddingx = (int)($width - $dwidth) / 2;
		$paddingy = (int)($height - $dheight) / 2;

		imagecopyresampled($tim, $dim, $paddingx, $paddingy, 0, 0, $dwidth, $dheight, $dinfo['width'], $dinfo['height']);

		// 保存图片
		if (!$save) {
			$save = $dst;
			unlink($dst);
		}

		$createfunc = 'image' . $dinfo['ext'];
		$createfunc($tim, $save);

		imagedestroy($dim);
		imagedestroy($tim);

		return true;

	}

}

// print_r(ImageTool::imageInfo('./home.jpg'));
/*
 echo ImageTool::water('./home.jpg','./smallfeng.png','home1.jpg',0)?'OK':'FAIL';
 echo ImageTool::water('./home.jpg','./smallfeng.png','home2.jpg',1)?'OK':'FAIL';
 echo ImageTool::water('./home.jpg','./smallfeng.png','home3.jpg',2)?'OK':'FAIL';
 echo ImageTool::water('./home.jpg','./smallfeng.png','home4.jpg',3)?'OK':'FAIL';
 */

登入後複製


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

C語言return的用法詳解 C語言return的用法詳解 Oct 07, 2023 am 10:58 AM

C語言return的用法有:1、對於傳回值類型為void的函數,可以使用return語句來提前結束函數的執行;2、對於傳回值型別不為void的函數,return語句的作用是將函數的執行結果傳回給呼叫者;3、提前結束函數的執行,在函數內部,我們可以使用return語句來提前結束函數的執行,即使函數並沒有回傳值。

Java中return和finally語句的執行順序是怎樣的? Java中return和finally語句的執行順序是怎樣的? Apr 25, 2023 pm 07:55 PM

原始碼:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}#輸出上述程式碼的輸出可以簡單地得出結論:return在finally之前執行,我們來看下字節碼層面上發生了什麼事情。下面截取case1方法的部分字節碼,並且對照源碼,將每個指令的含義註釋在

html的width是什麼意思 html的width是什麼意思 Jun 03, 2021 pm 02:15 PM

在html5中,width的意思是寬度,width屬性定義元素內容區的寬度,在內容區外面可以增加內邊距、邊框和外邊距,只需要給元素設定「元素{width:數值}」即可。

Vue3怎麼使用setup語法糖拒絕寫return Vue3怎麼使用setup語法糖拒絕寫return May 12, 2023 pm 06:34 PM

Vue3.2setup語法糖是在單文件組件(SFC)中使用組合式API的編譯時語法糖解決Vue3.0中setup需要繁瑣將聲明的變量、函數以及import引入的內容通過return向外暴露,才能在使用的問題1.在使用中無需return宣告的變數、函數以及import引入的內容,即可在使用語法糖//import引入的內容import{getToday}from'./utils'//變數constmsg='Hello !'//函數func

CSS 維度屬性詳解:height 與 width CSS 維度屬性詳解:height 與 width Oct 21, 2023 pm 12:42 PM

CSS維度屬性詳解:height和width在前端開發中,CSS是一種強大的樣式定義語言。其中,height和width是兩個最基本的維度屬性,用來定義元素的高度和寬度。本文將對這兩個屬性進行詳細解析,並提供具體的程式碼範例。一、height屬性height屬性用來定義元素的高度。可以使用像素(pixel)、百分比(percentage)或

詳解JavaScript函數傳回值和return語句 詳解JavaScript函數傳回值和return語句 Aug 04, 2022 am 09:46 AM

JavaScript 函數提供兩個介面實現與外界的交互,其中參數作為入口,接收外界資訊;返回值作為出口,並將運算結果回饋給外界。以下這篇文章帶大家了解JavaScript函數回傳值,淺析下return語句的用法,希望對大家有幫助!

使用JavaScript中return關鍵字 使用JavaScript中return關鍵字 Feb 18, 2024 pm 12:45 PM

JavaScript中return的用法,需要具體程式碼範例在JavaScript中,return語句用來指定從函數傳回的值。它不僅可以用於結束函數的執行,還可以將一個值傳回給呼叫函數的地方。 return語句有以下幾個常見的用法:傳回一個值return語句可以用來傳回一個值給呼叫函數的地方。下面是一個簡單的範例:functionadd(a,b){

JavaScript如何使用return語句 JavaScript如何使用return語句 Feb 26, 2024 am 09:21 AM

JavaScript中return的使用方法,需要具體程式碼範例在JavaScript中,return是一個非常重要的關鍵字,它通常用於函數中傳回值或結束函數的執行。 return語句用來將值傳回給函數的呼叫者,並終止函數的執行。 return語句可以在函數的任何位置使用,並且可以傳回任何JavaScript資料類型,包括數字、字串、布林值、

See all articles