php分析圖片中水印的位置,關于ThinkPHP打水印及設置水印位置的分析

這篇文章主要介紹了ThinkPHP打水印及設置水印位置的方法,結合實例形式分析了thinkPHP打印與設置水印的相關操作步驟與具體實現技巧,需要的朋友可以參考下

本文實例講述了ThinkPHP打水印及設置水印位置的方法。分享給大家供大家參考,具體如下:

最近在用Thinkphp的打水印的功能,發現只能打在左下角。 PHP打水印功還是很容易的,最要是用到bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

將 src_im 圖像中坐標從 src_x,src_y 開始,寬度為 src_w,高度為 src_h 的一部分拷貝到 dst_im 圖像中坐標為 dst_x 和 dst_y 的位置上。兩圖像將根據 pct 來決定合并程度,其值范圍從 0 到 100。當 pct = 0 時,實際上什么也沒做,當為 100 時對于調色板圖像本函數和 imagecopy() 完全一樣,它對真彩色圖像實現了 alpha 透明。

水印demo圖:

cf4c0c94994f1aa9a3bb778c0b4e884a.png

我需要把水印打到圖片的真中間,查看Thinkphp代碼。發現,作者居然是寫死了,我只能做一個修改

/**

* 為圖片添加水印

* @static public

* @param string $source 原文件名

* @param string $water 水印圖片

* @param string $$savename 添加水印后的圖片名

* @param string $postion 水印的具體位置 leftbottom rightbottom lefttop righttop center

* @param string $alpha 水印的透明度

* @return void

*/

static public function water($source, $water, $savename=null,$postion="center", $alpha=80) {

//檢查文件是否存在

if (!file_exists($source) || !file_exists($water))

return false;

//圖片信息

$sInfo = self::getImageInfo($source);

$wInfo = self::getImageInfo($water);

//如果圖片小于水印圖片,不生成圖片

if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height']) return false; //建立圖像 $sCreateFun = "imagecreatefrom" . $sInfo['type']; $sImage = $sCreateFun($source); $wCreateFun = "imagecreatefrom" . $wInfo['type']; $wImage = $wCreateFun($water); //設定圖像的混色模式 imagealphablending($wImage, true); //圖像位置,默認為右下角右對齊 $posArr = $this->WaterPostion($postion,$sInfo,$wInfo); //新增

//生成混合圖像

imagecopymerge($sImage, $wImage, $posArr[0], $posArr[1], 0, 0, $wInfo['width'], $wInfo['height'], $alpha);

//輸出圖像

$ImageFun = 'Image' . $sInfo['type'];

//如果沒有給出保存文件名,默認為原圖像名

if (!$savename) {

$savename = $source;

@unlink($source);

}

//保存圖像

$ImageFun($sImage, $savename);

imagedestroy($sImage);

}

private function WaterPostion($postion,$sInfo,$wInfo)

{

$posY = $sInfo["height"] - $wInfo["height"];

$posX = $sInfo["width"] - $wInfo["width"];

switch($postion)

{

case "rightbottom":

return array($posX,$posY);

break;

case "leftbottom":

return array($wInfo["width"],$posY);

break;

case "lefttop":

return array($wInfo["width"],$wInfo["height"]);

break;

case "righttop":

return array($posX,$wInfo["height"]);

break;

case "center":

return array($posX/2,$posY/2);

break;

}

}

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為交換機命令_華為交換機常用命令

華為交換機常用命令&#xff1a;1、display current-configuration 顯示當前配置2、display interface GigabitEthernet 1/1/4 顯示接口信息3、display packet-filter interface GigabitEthernet 1/1/4 顯示接口acl應用信息4、display acl all 顯示所有acl設置 3900系列交換機5…

java中兩種添加監聽器的策略

/*第一種&#xff1a;將事件的處理委托給其他對象&#xff0c;下面的例子是委托給了MyListener&#xff08;implements ActionListener&#xff09;*/ 1 import java.applet.Applet;2 import java.awt.event.*;3 import java.awt.*;4 public class ChangeColor extends Applet{…

php dos命令用不了,windows下如何使用DOS命令強制復制文件

有的時候&#xff0c;我們可能需要替換某些目錄下的一些文件&#xff0c;手動去一個個目錄找的話&#xff0c;就會比較麻煩&#xff0c;這時候&#xff0c;就是我們程序員上場的時候了&#xff0c;程序雖然好寫&#xff0c;但是dos命令并不是每個人都玩的轉的&#xff0c;而且最…

java的棧圖形演示

1 import java.awt.*;2 import javax.swing.*;3 import java.awt.event.*;4 /*5 指示發生了組件定義的動作的語義事件。當特定于組件的動作&#xff08;比如被按下&#xff09;發生時&#xff0c;由組件&#xff08;比如 Button&#xff09;生成此高級別事件。6 事件被傳遞給每…

python播放本地視頻_python opencv 讀取本地視頻文件 修改ffmpeg的方法

Python opencv 讀取視頻的三種情況&#xff1a;情況一&#xff1a;通過攝像頭采集視頻情況二&#xff1a;通過本地視頻文件獲取視頻情況三&#xff1a;通過攝像頭錄制視頻&#xff0c;再讀取錄制的視頻攝像頭采集、本地視頻文件的讀取、寫視頻文件&#xff0c;網上都有代碼。我…

kali里PHP文件502錯誤,解決Linux Kali iptables開放22端口失敗等一系列問題

這篇文章是針對2020年下載安裝的kali系統碰到的關于 iptables開放22端口失敗等一系列問題的解決辦法&#xff0c;如果是其它系統&#xff0c;可以借鑒一下思路。各種報錯&#xff1a;# sudo systemctl start iptablesFailed to start iptables.service: Unit iptables.service …

中綴試轉后綴試及前綴試并計算其結果

1 /*2 參考大神nb的代碼&#xff0c;感覺思路不錯&#xff01;終于搞明白了&#xff01;一開始不明白在計算表達式的時候&#xff0c;利用棧到底做了什么&#xff01;現在感覺我們利用棧就是模擬我們書面上計算表達式&#xff0c;3 將優先級高的運算先計算出來&…

ros如何編譯python文件_Python為ROS編寫一個簡單的發布者和訂閱者

Python為ROS編寫一個簡單的發布者和訂閱者1.創建工作空間1.1建立文件夾hello_rospy,再在該目錄下建立子目錄src,并創建工作空間mkdir -p ~/hello_rospy/srccd ~/hello_rospy/srccatkin_init_workspace1.2 編譯cd ~/hello_rospy/catkin_make1.3設置運行環境echo "source ~/…

php整站防注入程序,php通用防注入程序 推薦

function jk1986_checksql(){$bad_str "and|select|update|‘|delete|insert|*";$bad_Array explode("|",$bad_str);/** 過濾Get參數 **/foreach ($bad_Array as $bad_a){foreach ($_GET as $g){if (substr_count(strtolower($g),$bad_a) > 0){echo &…

表達式建樹

//用數組實現樹 1 #include<iostream> 2 #include<ctype.h>3 #include<cstring>4 #define N 100005 #define optd 16 #define optr 27 using namespace std;8 int treeL[N], treeR[N];9 class node 10 { 11 public: 12 int flag;//區分當前節點是操作符還…

python label標簽的作用_label標簽的作用是什么?

label標簽的作用是為鼠標用戶改進了可用性&#xff0c;當用戶點擊【】標簽中的文本時&#xff0c;瀏覽器就會自動將焦點轉到和該標簽相關聯的控件上。label標簽的作用&#xff1a;一、標簽定義及用法在html中&#xff0c;標簽通常和標簽一起使用&#xff0c;標簽為input元素定義…

java異常自定義返回信息,Spring Boot 如何自定義返回錯誤碼錯誤信息

說明在實際的開發過程中,很多時候要定義符合自己業務的錯誤碼和錯誤信息&#xff0c;而不是統一的而不是統一的下面這種格式返回到調用端INTERNAL_SERVER_ERROR(500, "Internal Server Error"),下面我們來看看如何將我們自定義的錯誤碼和錯誤信息返回到調用端。1 自定…

文件管理系統_Python學習第170節--Linux文件管理系統實際操作和具體介紹

【每天幾分鐘&#xff0c;從零入門python編程的世界&#xff01;】上節我們簡單了解了Linux文件管理系統&#xff0c;現在我們學習它的實際操作。首先我們解釋下~和/的區別。~之前我們介紹過&#xff0c;我們說~是Linux系統的根目錄&#xff0c;其實這個說法是不準確的&#xf…

redis 計數器 java_Redis 的 8 大應用場景!

之前講過Redis的介紹&#xff0c;及使用Redis帶來的優勢&#xff0c;這章整理了一下Redis的應用場景&#xff0c;也是非常重要的&#xff0c;學不學得好&#xff0c;能正常落地是關鍵。下面一一來分析下Redis的應用場景都有哪些。1、緩存緩存現在幾乎是所有中大型網站都在用的必…

sql中in與php數組,格式化SQL“IN”子句的PHP數組

我正在嘗試在數據庫中查詢“product_id”包含在產品ID數組中的記錄.該數組是多選輸入(< select>)的結果,如下所示&#xff1a;$clients Array ([0] > 80000016-1302638679[1] > 8000003B-1329924004)我想將該數組傳遞給sql語句的“IN”子句,例如&#xff1a;$sql …

匯編漢諾塔

1 .3862 .model flat3 .stack 40964 include io.h5 ExitProcess proto near32 stdcall, ExitCode:dword6 cr equ 0dh7 lf equ 0ah8 .data9 string1 byte "請輸入漢諾塔數&#xff1a;", cr, lf 10 strNum byte 10 dup(?) 11 result byte 10 dup( ) 12 byte c…

oracle精度說明符1~38_Oracle 錯誤代碼總結及解決方案

ORA-00001&#xff1a;違反唯一約束條件(主鍵錯誤)ORA-00028&#xff1a;無法連接數據庫進程ORA-00900&#xff1a;無效sql語句ORA-00904&#xff1a;字段名寫錯或是建表時最后一個字段有逗號ORA-00907&#xff1a;缺少右括號ORA-00911&#xff1a;無效字符ORA-00917&#xff1…

opencv為matlab,OpenCV與matlab部分函數的對應關系(轉)

2、matlab中的zeros函數相當于OpenCV中的cvSetZero函數。3、matlab中的兩矩陣點乘 .*相當于OpenCV中的cvMul函數。4、matlab中的兩矩陣點除 ./相當于OpenCV中的cvDiv函數。5、matlab中的兩矩陣相加 相當于OpenCV中的cvAdd函數。6、matlab中的兩矩陣相減 -相當于OpenCV中的cvSub…

預測分析算法的設計與實現_基于LD(編輯距離算法)的單詞速記數據庫分析設計與實現...

2020-21-1學期《最新數據庫管理系統》結課作業展示。作者&#xff1a;牟倫利 褚四浩 陳思琴 曹鵬飛(電商11802)分工陳思琴&#xff1a;系統需求分析 、系統相關算法分析和ER圖曹鵬飛&#xff1a;系統數據字典 、業務流程圖、數據流程圖和PPT制作牟倫利&#xff1a;存儲過程、觸…

參考文獻要不要首行縮進_參考文獻格式要求(2015-2016-2)

1參考文獻統一使用下列格式一、參考文獻構成參考文獻分為兩個部分&#xff1a;正文部分的夾注和文后參考文獻處的參考文獻條目。1.正文部分的夾注(作者的姓頁碼)正文引用了他人的觀點后&#xff0c;在后面緊靠引用處給出夾注。例如&#xff1a;The contemporary text linguisti…