如何實作php程式碼處理圖片
本篇主要介紹如何實現php程式碼處理圖片,有興趣的朋友參考下,希望對大家有幫助。
一、 圖片縮放程式碼
#非等比例圖片縮放程式碼
$fileNames='./images/hee.jpg'; list($s_w,$s_h)=getimagesize($fileNames); $per=0.3; $n_w=$s_w*$per; $n_h=$s_h*$per; $s_img=imagecreatefromjpeg($fileNames); $n_img=imagecreatetruecolor($n_w,$n_h); imagecopyresized($n_img,$s_img,0,0,0,0,$n_w,$n_h,$s_w,$s_h); header("Content-Type:image/jpeg"); imagejpeg($n_img,'./images/hee2.jpg'); imagedestroy($n_img); imagedestroy($s_img); function sf($backgroung,$bl,$location){ list($width,$height)=getimagesize($backgroung); $n_w=$width*$bl; $n_h=$height*$bl; $s_img=imagecreatefromjpeg($backgroung); $n_img=imagecreatetruecolor($n_w,$n_h); imagecopyresized($n_img,$s_img,0,0,0,0,$n_w,$n_h,$width,$height); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } //sf('./images/hee.jpg',0.3,'./images/hee9.jpg');
等比例圖片縮放(並且加了透明色處理)
function imagesf($backgroung,$n_w,$n_h,$newFiles){ list($s_w,$s_h,$imagetype)=getimagesize($backgroung); //等比例缩放固定算法 if ($n_w && ($s_w < $s_h)) { $n_w = ($n_h / $s_h) * $s_w; } else { $n_h = ($n_w / $s_w) * $s_h; } if($imagetype==2){ $s_img=imagecreatefromjpeg($backgroung); }elseif($imagetype==3){ $s_img=imagecreatefrompng($backgroung); }elseif($imagetype==1){ $s_img=imagecreatefromgif($backgroung); }else{ echo "php 不支持这中图片类型!!"; } $n_img=imagecreatetruecolor($n_w,$n_h); //取得原图形的索引 $img_index=imagecolortransparent($s_img); //判断原图形索引是否在图形调色板的数目范围内(调色板数目 0~255); if($img_index>=0 && $img_index<imagecolorstotal($s_img)){ //返回一个具有 red,green,blue 和 alpha 的键名的关联数组,包含了指定颜色索引的相应的值 $trans=imagecolorsforindex($s_img,$img_index); //print_r($trans); Array ( [red] => 255 [green] => 255 [blue] => 255 [alpha] => 127 ) //取原图的颜色,给新图分配颜色 $n_color=imagecolorallocate($n_img,$trans['red'],$trans['green'],$trans['blue']); imagefill($n_img,0,0,$n_color); //把获取到的颜色,设置为新图的透明色 imagecolortransparent($n_img,$n_color); } //imagecopyresampled($n_img,$s_img,0,0,0,0,$n_w,$n_h,$s_w,$s_h); if(imagetypes()& IMG_JPG){ header("Content-Type:image/jpeg"); imagejpeg($n_img,$newFiles); }elseif(imagetypes()& IMG_PNG){ header("Content-Type:image/png"); imagepng($n_img,$newFiles); }elseif(imagetypes()& IMG_GIF){ header("Content-Type:image/gif"); imagegif($n_img,$newFiles); }else{ echo "php 不支持这中图片类型!!"; } imagedestroy($s_img); imagedestroy($n_img); } imagesf('./images/map.gif',200,200,'./images/map2.gif');
二、
圖片裁切程式碼
##圖片裁切function imagecut($backgroung,$cut_x,$cut_y,$cut_width,$cut_hight,$fileNames){ list(,,$imagetype)=getimagesize($backgroung); if($imagetype==1){ $s_img=imagecreatefromgif($backgroung); }elseif($imagetype==2){ $s_img=imagecreatefromjpeg($backgroung); }elseif($imagetype==2){ $s_img=imagecreatefrompng($backgroung); }else{ echo "php 不支持这种图片类型!!"; } $n_img=imagecreatetruecolor($cut_width,$cut_hight); imagecopyresized($n_img,$s_img,0,0,$cut_x,$cut_y,$cut_width,$cut_hight,$cut_width,$cut_hight); if(imagetypes() & IMG_GIF){ header("Content-Type:image/gif"); imagegif($n_img,$fileNames); }elseif(imagetypes() & IMG_JPG){ header("Content-Type:image/jpeg"); imagejpeg($n_img,$fileNames); }elseif(imagetypes() & IMG_PNG){ header("Content-Type:image/png"); imagepng($n_img,$fileNames); }else{ echo "php 不支持这种图片类型!!"; } } //imagecut('./images/hee.jpg',52, 47, 345, 330,'./images/hee4.jpg'); function cut($backgroung,$x,$y,$cut_width,$cut_hight,$location){ $s_img=imagecreatefromjpeg($backgroung); $n_img=imagecreatetruecolor($cut_width,$cut_hight); imagecopy($n_img,$s_img,0,0,$x,$y,$cut_width,$cut_hight); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } //cut('./images/hee.jpg',52, 47, 345, 330,'./images/hee8.jpg');登入後複製
圖片裁剪並對裁剪後的圖片縮放,不是等比例圖片縮放(就是拷貝部分圖像並調整大小) imagecopyresized() — 拷貝部分圖像並調整大小
#imagecopyresampled() — 重取樣拷貝部分影像並調整大小function cutsf($backgroung,$x,$y,$cut_width,$cut_hight,$n_w,$n_h,$location){
$s_img=imagecreatefromjpeg($backgroung);
$n_img=imagecreatetruecolor($n_w,$n_h);
imagecopyresized($n_img,$s_img,0,0,$x,$y,$n_w,$n_h,$cut_width,$cut_hight);
header("Content-Type:image/jpeg");
imagejpeg($n_img,$location);
imagedestroy($s_img);
imagedestroy($n_img);
}
cutsf('./images/hee.jpg',52, 47, 345, 330,200,200,'./images/hee10.jpg');
三、圖片加浮水印:文字浮水印與圖片浮水印程式碼
#圖片加文字浮水印
function mark_text($backgroung,$x,$y,$text,$fileNames){ list(,,$imagetype)=getimagesize($backgroung); if($imagetype == 1){ $s_img=imagecreatefromgif($backgroung); }elseif($imagetype == 2){ $s_img=imagecreatefromjpeg($backgroung); }elseif($imagetype == 3){ $s_img=imagecreatefrompng($backgroung); } $green=imagecolorallocate($s_img,0,255,0); imagettftext($s_img,20,0,$x,$y,$green,'./font/msyh.ttf',$text); if(imagetypes() & IMG_GIF){ header("Content-Type:image/gif"); imagegif($s_img,$fileNames); }elseif(imagetypes() & IMG_JPG){ header("Content-Type:image/jpeg"); imagejpeg($s_img,$fileNames); }elseif(imagetypes() & IMG_PNG){ header("Content-Type:image/png"); imagepng($s_img,$fileNames); } imagedestroy($s_img); } $text=iconv('gb2312','utf-8','细说PHP'); //mark_text('./images/hee.jpg',150,250,$text,'./images/hee5.jpg');
#圖片加上影像浮水印
#function mark_pic($backgroung,$x,$y,$waterpic,$fileNames){
$s_img=imagecreatefromjpeg($backgroung);
$waterpic_img=imagecreatefromgif($waterpic);
$waterpic_w=imagesx($waterpic_img);
$waterpic_h=imagesy($waterpic_img);
imagecopy( $s_img, $waterpic_img, $x,$y, 0,0, $waterpic_w,$waterpic_h);
header("Content-Type:image/jpeg");
imagejpeg($s_img,$fileNames);
imagedestroy($s_img);
imagedestroy($waterpic_img);
}
//mark_pic('./images/hee.jpg',50,200,'./images/gaolf.gif','./images/hee6.jpg');
#四、 影像旋轉程式碼
#圖片旋轉resource imagerotate() — 用給定角度旋轉影像,傳回新資源
function imagexz($backgroung,$angle,$location){ $s_img=imagecreatefromjpeg($backgroung); $n_img=imagerotate($s_img,$angle,0); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } imagexz('./images/hee.jpg',360,'images/hee10.jpg'); //90 180 270 360
五、 圖片翻轉
function turn_y($backgroung,$newFiles){
$s_img=imagecreatefromjpeg($backgroung);
$width=imagesx($s_img);
$height=imagesy($s_img);
$n_img=imagecreatetruecolor($width,$height);
for( $x=0; $x<$width; $x++ ){
imagecopy($n_img,$s_img, $width-$x-1,0, $x,0, 1,$height);
}
header("Content-Type:image/jpeg");
imagejpeg($n_img,$newFiles);
imagedestroy($s_img);
imagedestroy($n_img);
}
//turn_y('./images/hee.jpg','./images/hee11.jpg');
############################ #######################################圖片沿著x軸翻轉 就是上下對調#### #####
function turn_x($backgroung,$newFiles){ $s_img=imagecreatefromjpeg($backgroung); $width=imagesx($s_img); $height=imagesy($s_img); $n_img=imagecreatetruecolor($width,$height); for( $y=0; $y<$height; $y++ ){ imagecopy($n_img,$s_img, 0,$height-$y-1, 0,$y, $width,1); } header("Content-Type:image/jpeg"); imagejpeg($n_img,$newFiles); imagedestroy($s_img); imagedestroy($n_img); } //turn_x('./images/hee.jpg','./images/hee12.jpg');
function sharp($background, $degree, $save){ $back=imagecreatefromjpeg($background); $b_x=imagesx($back); $b_y=imagesy($back); $dst=imagecreatefromjpeg($background); for($i=$b_x-1; $i>0; $i--){ for($j=$b_y-1; $j>0; $j--){ $b_clr1=imagecolorsforindex($back, imagecolorat($back, $i-1, $j-1)); $b_clr2=imagecolorsforindex($back, imagecolorat($back, $i, $j)); $r=intval($b_clr2["red"]+$degree*($b_clr2["red"]-$b_clr1["red"])); $g=intval($b_clr2["green"]+$degree*($b_clr2["green"]-$b_clr1["green"])); $b=intval($b_clr2["blue"]+$degree*($b_clr2["blue"]-$b_clr1["blue"])); $r=min(255, max($r, 0)); $g=min(255, max($g, 0)); $b=min(255, max($b, 0)); if(($d_clr=imagecolorexact($dst, $r, $g, $b))==-1){ $d_clr=Imagecolorallocate($dst, $r, $g, $b); } imagesetpixel($dst, $i, $j, $d_clr); } } imagejpeg($dst, $save); imagedestroy($back); imagedestroy($dst); } sharp("./images/hee.jpg", 20, "./images/hee15.jpg");
#解析开始:
#1 创建要锐化的图片资源
#eg:$s_img=imagecreatefromjpeg('./images/hee.jpg');
#2 获取图片资源的宽、高,创建两层循环(外层控制宽 内层控制高) 对每一个像素进行锐化
#eg:$width=imagesx($s_img);
# $height=imagesy($s_img);
# for($i=$width-1; $i>0; $i--){
# for($j=$height-1; $j>0; $j--){
#
# }
# }
#3 在内层循环里对每一个像素颜色进行锐化(写在内层循环):
#3.1 用函数$color=imagecolorsforindex()取得图片索引的颜色,即取得当前颜色和取得上一个颜色
#eg: $s_img_color1=imagecolorsforindex($s_img , imagecolorat($s_img , $i-1, $j-1));//上一个颜色
# $s_img_color2=imagecolorsforindex($s_img , imagecolorat($s_img , $i, $j));//当前颜色
#3.2 固定算法对取得的颜色进行锐化 比如锐化20:$degree=20
#eg:$r=intval($color["red"]+$degree*($color["red"]-$color["red"]));
# $g=intval($s_img_color2["green"]+$degree*($s_img_color2["green"]-$s_img_color1["green"]));
# $b=intval($s_img_color2["blue"]+$degree*($s_img_color2["blue"]-$s_img_color1["blue"]));
#3.3 把取得的RGB颜色控制在0~255正常范围内
#$r=min(255, max($r, 0));
#$g=min(255, max($g, 0));
#$b=min(255, max($b, 0));
#4 把锐化后的每一个像素颜色重新赋给原图的每一个像素颜色(写在内层循环)
#4.1 取得锐化后颜色的索引:$rh_color
#eg:if( ($rh_color=imagecolorexact($s_img,$r,$g,$b)) ==-1){
# $rh_color=imagecolorallocate($s_img,$r,$g,$b);
# }
#4.2 把锐化后的每一个像素颜色重新赋给原图的每一个像素颜色
eg:imagesetpixel($s_img, $i, $j, $rh_color);
#5 保存图片资源(写在循环外)
#eg:imagejpeg($s_img'./images/hee16.jpg');
#6 关闭图片资源(写在循环外)
#eg:imagedestroy($s_img);
#解析结束
根据解决在写一遍图片锐化代码
function sharp($background, $degree, $location){ #step 1 创建图片资源 $s_img=imagecreatefromjpeg($background); #step 2 获取图片资源的宽高 $b_x=imagesx($s_img); $b_y=imagesy($s_img); #step 3 两层循环进行锐化 外层控制宽 内层控制高 for( $i=$b_x-1; $i>0; $i-- ){ for( $j=$b_y-1; $j>0; $j-- ){ #step 4 取得图片索引的颜色:当前颜色和上一个颜色 $s_img_color1=imagecolorsforindex($s_img, imagecolorat($s_img, $i-1, $j-1)); $s_img_color2=imagecolorsforindex($s_img, imagecolorat($s_img, $i, $j)); #step 5 固定算法对取得的颜色进行锐化 $r=intval($s_img_color2["red"]+$degree*($s_img_color2["red"]-$s_img_color1["red"])); $g=intval($s_img_color2["green"]+$degree*($s_img_color2["green"]-$s_img_color1["green"])); $b=intval($s_img_color2["blue"]+$degree*($s_img_color2["blue"]-$s_img_color1["blue"])); #step 6 把取得的RGB颜色控制在0~255正常范围内 $r=min(255, max($r, 0)); $g=min(255, max($g, 0)); $b=min(255, max($b, 0)); #step 7 取得锐化后颜色的索引 if( ($d_clr=imagecolorexact($s_img,$r,$g,$b)) ==-1){ $d_clr=imagecolorallocate($s_img,$r,$g,$b); } #step 8 把锐化后的颜色重新赋给图片资源的每一个像素 imagesetpixel($s_img, $i, $j, $d_clr); } } imagejpeg($s_img,$location); imagedestroy($s_img); } sharp('./images/hee.jpg',50,'./images/hee16.jpg');登入後複製相关推荐:
以上是如何實作php程式碼處理圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元
