PHP 画像透かしコード例分析_PHP チュートリアル
通常の Web サイトでは、多くの場合、写真をアップロードするときに、独自の Web サイトのロゴの透かしを画像に追加する必要があります。では、このステップをどのように実装すればよいでしょうか?まず、理解しましょう
ファイルタイプを判断してグラフィックを作成し、それを最初に作成したグラフィックにコピーし、塗りつぶして四角形を作成し、imagestring() に書き込むか、元の透かしを判断する準備を整えます画像プログラム タイプ: 1 つは文字列で、もう 1 つはその上にグラフィック オブジェクトを追加します。以下は透かし入りのPHP画像の転載です!
パラメータの説明:
$max_file_size: アップロードするファイルのサイズ制限、単位 BYTE
$destination_folder: アップロードするファイルのパス
$watermark: ウォーターマークを付けるかどうか (1 はウォーターマークを追加することを意味し、その他はウォーターマークを追加しないことを意味します)
PHP 画像ウォーターマークの使用手順:
1. GD ライブラリを使用する必要があるため、PHP.INI ファイルの「extension=php_gd2.dll」行の前にある ; 記号を削除します。2. extension_dir = を次の場所に変更します。 php_gd2.dll は次の場所にあります。 目次;
<ol class="dp-xml"> <li class="alt"><span><span>//上传文件类型列表 </span></span></li> <li> <span>$</span><span class="attribute">uptypes</span><span>=</span><span class="attribute-value">array</span><span>( </span> </li> <li class="alt"><span>'image/jpg', </span></li> <li><span>'image/jpeg', </span></li> <li class="alt"><span>'image/png', </span></li> <li><span>'image/pjpeg', </span></li> <li class="alt"><span>'image/gif', </span></li> <li><span>'image/bmp', </span></li> <li class="alt"><span>'image/x-png' </span></li> <li><span>); </span></li> <li class="alt"> <span>$</span><span class="attribute">max_file_size</span><span>=</span><span class="attribute-value">2000000</span><span>; //上传文件大小限制, 单位BYTE </span> </li> <li> <span>$</span><span class="attribute">destination_folder</span><span>=</span><span class="attribute-value">"uploadimg/"</span><span>; //上传文件路径 </span> </li> <li class="alt"> <span>$</span><span class="attribute">watermark</span><span>=</span><span class="attribute-value">1</span><span>; //是否附加水印(1为加水印,其他为不加水印); </span> </li> <li> <span>$</span><span class="attribute">watertype</span><span>=</span><span class="attribute-value">1</span><span>; //水印类型(1为文字,2为图片) </span> </li> <li class="alt"> <span>$</span><span class="attribute">waterposition</span><span>=</span><span class="attribute-value">1</span><span>; //水印位置(1为左下角,2为右下角 </span> </li> <li><span>,3为左上角,4为右上角,5为居中); </span></li> <li class="alt"> <span>$</span><span class="attribute">waterstring</span><span>="</span><span class="tag"><</span><span> </span><span class="tag-name">A</span><span> href="</span><span class="attribute-value">http</span><span>://www.xplore.cn/"</span><span class="tag">></span><span> </span> </li> <li> <span>http://www.xplore.cn/</span><span class="tag"><</span><span> /A</span><span class="tag">></span><span>"; //水印字符串 </span> </li> <li class="alt"> <span>$</span><span class="attribute">waterimg</span><span>=</span><span class="attribute-value">"xplore.gif"</span><span>; //水印图片 </span> </li> <li> <span>$</span><span class="attribute">imgpreview</span><span>=</span><span class="attribute-value">1</span><span>; //是否生成预览图(1为生成,其他为不生成); </span> </li> <li class="alt"> <span>$</span><span class="attribute">imgpreviewsize</span><span>=</span><span class="attribute-value">1</span><span>/2; //缩略图比例 </span> </li> <li> <span class="tag">?></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> </span><span class="tag-name">html</span><span class="tag">></span><span> </span> </li> <li> <span class="tag"><</span><span> </span><span class="tag-name">head</span><span class="tag">></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> </span><span class="tag-name">title</span><span class="tag">></span><span>ZwelL图片上传程序</span><span class="tag"></</span><span class="tag-name">title</span><span class="tag">></span><span> </span> </li> <li> <span class="tag"><</span><span> </span><span class="tag-name">style</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text/css"</span><span class="tag">></span><span> </span> </li> <li class="alt"> <span><!-- </span></li><li><span>body </span></li><li class="alt"><span>{ </span></li><li><span>font-size: 9pt; </span></li><li class="alt"><span>} </span></li><li><span>input </span></li><li class="alt"><span>{ </span></li><li><span>background-color: #66CCFF; </span></li><li class="alt"><span>border: 1px inset #CCCCCC; </span></li><li><span>} </span></li><li class="alt"><span>--</span><span class="tag">></span><span> </span> </li> <li> <span class="tag"><</span><span> /style</span><span class="tag">></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> /head</span><span class="tag">></span><span> </span> </li> <li> <span class="tag"><</span><span> </span><span class="tag-name">body</span><span class="tag">></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> </span><span class="tag-name">form</span><span> </span><span class="attribute">enctype</span><span>=</span><span class="attribute-value">"multipart/form-data"</span><span> </span></li><li><span class="attribute">method</span><span>=</span><span class="attribute-value">"post"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"upform"</span><span class="tag">></span><span> </span> </li> <li class="alt"><span>上传文件: </span></li> <li> <span class="tag"><</span><span class="tag-name">input</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"upfile"</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"file"</span><span class="tag">></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> </span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"submit"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"上传"</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span> </span> </li> <li> <span>允许上传的文件类型为:</span><span class="tag"><?</span><span>=implode(', ',$uptypes)</span><span class="tag">?></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> /form</span><span class="tag">></span><span> </span> </li> <li> <span class="tag"><</span><span> ?php </span></li><li class="alt"><span>if ($_SERVER['REQUEST_METHOD'] == 'POST') </span></li><li><span>{ </span></li><li class="alt"><span>if (!is_uploaded_file($_FILES["upfile"] </span></li><li><span>[tmp_name])) </span></li><li class="alt"><span>//是否存在文件 </span></li><li><span>{ </span></li><li class="alt"><span>echo "图片不存在!"; </span></li><li><span>exit; </span></li><li class="alt"><span>} </span></li><li><span>$</span><span class="attribute">file</span><span> = $_FILES["upfile"]; </span></li><li class="alt"><span>if($max_file_size </span><span class="tag"><</span><span> $file["size"]) </span></li><li><span>//检查文件大小 </span></li><li class="alt"><span>{ </span></li><li><span>echo "文件太大!"; </span></li><li class="alt"><span>exit; </span></li><li><span>} </span></li><li class="alt"><span>if(!in_array($file["type"], $uptypes)) </span></li><li><span>//检查文件类型 </span></li><li class="alt"><span>{ </span></li><li><span>echo "文件类型不符!".$file["type"]; </span></li><li class="alt"><span>exit; </span></li><li><span>} </span></li><li class="alt"><span>if(!file_exists($destination_folder)) </span></li><li><span>{ </span></li><li class="alt"><span>mkdir($destination_folder); </span></li><li><span>} </span></li><li class="alt"><span>$</span><span class="attribute">filename</span><span>=$file["tmp_name"]; </span></li><li><span>$</span><span class="attribute">image_size</span><span> = </span><span class="attribute-value">getimagesize</span><span>($filename); </span></li><li class="alt"><span>$</span><span class="attribute">pinfo</span><span>=</span><span class="attribute-value">pathinfo</span><span>($file["name"]); </span></li><li><span>$</span><span class="attribute">ftype</span><span>=$pinfo['extension']; </span></li><li class="alt"><span>$</span><span class="attribute">destination</span><span> = $destination_folder. </span></li><li><span>time().".".$ftype; </span></li><li class="alt"><span>if (file_exists($destination) && </span></li><li><span> $overwrite != true) </span></li><li class="alt"><span>{ </span></li><li><span>echo "同名文件已经存在了"; </span></li><li class="alt"><span>exit; </span></li><li><span>} </span></li><li class="alt"><span>if(!move_uploaded_file ($filename, </span></li><li><span> $destination)) </span></li><li class="alt"><span>{ </span></li><li><span>echo "移动文件出错"; </span></li><li class="alt"><span>exit; </span></li><li><span>} </span></li><li class="alt"><span>$</span><span class="attribute">pinfo</span><span>=</span><span class="attribute-value">pathinfo</span><span>($destination); </span></li><li><span>$</span><span class="attribute">fname</span><span>=$pinfo[basename]; </span></li><li class="alt"><span>echo " </span><span class="tag"><</span><span class="tag-name">font</span><span> </span><span class="attribute">color</span><span>=</span><span class="attribute-value">red</span><span class="tag">></span><span>已经成功上传 </span> </li> <li> <span class="tag"><</span><span> /font</span><span class="tag">></span><span class="tag"><</span><span class="tag-name">br</span><span class="tag">></span><span>文件名: </span> </li> <li class="alt"> <span class="tag"><</span><span> </span><span class="tag-name">font</span><span> </span><span class="attribute">color</span><span>=</span><span class="attribute-value">blue</span><span class="tag">></span><span>".$destination_folder. </span> </li> <li> <span>$fname."</span><span class="tag"><</span><span> /font</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span>"; </span> </li> <li class="alt"><span>echo " 宽度:".$image_size[0]; </span></li> <li><span>echo " 长度:".$image_size[1]; </span></li> <li class="alt"> <span>echo "</span><span class="tag"><</span><span class="tag-name">br</span><span class="tag">></span><span> 大小:".$file["size"]." bytes"; </span> </li> <li> <span>if($</span><span class="attribute">watermark</span><span>==1) </span> </li> <li class="alt"><span>{ </span></li> <li> <span>$</span><span class="attribute">iinfo</span><span>=</span><span class="attribute-value">getimagesize</span><span>($destination,$iinfo); </span> </li> <li class="alt"> <span>$</span><span class="attribute">nimage</span><span>=</span><span class="attribute-value">imagecreatetruecolor</span><span>($image_size[0] </span> </li> <li><span>,$image_size[1]); </span></li> <li class="alt"> <span>$</span><span class="attribute">white</span><span>=</span><span class="attribute-value">imagecolorallocate</span><span>($nimage,255,255,255); </span> </li> <li> <span>$</span><span class="attribute">black</span><span>=</span><span class="attribute-value">imagecolorallocate</span><span>($nimage,0,0,0); </span> </li> <li class="alt"> <span>$</span><span class="attribute">red</span><span>=</span><span class="attribute-value">imagecolorallocate</span><span>($nimage,255,0,0); </span> </li> <li><span>imagefill($nimage,0,0,$white); </span></li> <li class="alt"><span>switch ($iinfo[2]) </span></li> <li><span>{ </span></li> <li class="alt"><span>case 1: </span></li> <li> <span>$</span><span class="attribute">simage</span><span> =</span><span class="attribute-value">imagecreatefromgif</span><span>($destination); </span> </li> <li class="alt"><span>break; </span></li> <li><span>case 2: </span></li> <li class="alt"> <span>$</span><span class="attribute">simage</span><span> =</span><span class="attribute-value">imagecreatefromjpeg</span><span>($destination); </span> </li> <li><span>break; </span></li> <li class="alt"><span>case 3: </span></li> <li> <span>$</span><span class="attribute">simage</span><span> =</span><span class="attribute-value">imagecreatefrompng</span><span>($destination); </span> </li> <li class="alt"><span>break; </span></li> <li><span>case 6: </span></li> <li class="alt"> <span>$</span><span class="attribute">simage</span><span> =</span><span class="attribute-value">imagecreatefromwbmp</span><span>($destination); </span> </li> <li><span>break; </span></li> <li class="alt"><span>default: </span></li> <li><span>die("不支持的文件类型"); </span></li> <li class="alt"><span>exit; </span></li> <li><span>} </span></li> <li class="alt"><span>imagecopy($nimage,$simage,0,0,0,0, </span></li> <li><span>$image_size[0],$image_size[1]); </span></li> <li class="alt"><span>imagefilledrectangle($nimage,1, </span></li> <li><span>$image_size[1]-15,80,$image_size[1],$white); </span></li> <li class="alt"><span>switch($watertype) </span></li> <li><span>{ </span></li> <li class="alt"><span>case 1: //加水印字符串 </span></li> <li><span>imagestring($nimage,2,3,$image_size[1]-15, </span></li> <li class="alt"><span>$waterstring,$black); </span></li> <li><span>break; </span></li> <li class="alt"><span>case 2: //加水印图片 </span></li> <li> <span>$</span><span class="attribute">simage1</span><span> =</span><span class="attribute-value">imagecreatefromgif</span><span>("xplore.gif"); </span> </li> <li class="alt"><span>imagecopy($nimage,$simage1,0,0,0,0,85,15); </span></li> <li><span>imagedestroy($simage1); </span></li> <li class="alt"><span>break; </span></li> <li><span>} </span></li> <li class="alt"><span>switch ($iinfo[2]) </span></li> <li><span>{ </span></li> <li class="alt"><span>case 1: </span></li> <li><span>//imagegif($nimage, $destination); </span></li> <li class="alt"><span>imagejpeg($nimage, $destination); </span></li> <li><span>break; </span></li> <li class="alt"><span>case 2: </span></li> <li><span>imagejpeg($nimage, $destination); </span></li> <li class="alt"><span>break; </span></li> <li><span>case 3: </span></li> <li class="alt"><span>imagepng($nimage, $destination); </span></li> <li><span>break; </span></li> <li class="alt"><span>case 6: </span></li> <li><span>imagewbmp($nimage, $destination); </span></li> <li class="alt"><span>//imagejpeg($nimage, $destination); </span></li> <li><span>break; </span></li> <li class="alt"><span>} </span></li> <li><span>//覆盖原上传文件 </span></li> <li class="alt"><span>imagedestroy($nimage); </span></li> <li><span>imagedestroy($simage); </span></li> <li class="alt"><span>} </span></li> <li> <span>if($</span><span class="attribute">imgpreview</span><span>==1) </span> </li> <li class="alt"><span>{ </span></li> <li> <span>echo "</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span>图片预览:</span><span class="tag"><</span><span class="tag-name">br</span><span class="tag">></span><span>"; </span> </li> <li class="alt"> <span>echo "</span><span class="tag"><</span><span> </span><span class="tag-name">ccid_file</span><span> </span><span class="attribute">values</span><span>=</span><span class="attribute-value">""</span><span> </span><span class="attribute">width</span><span>=". </span></li><li><span>($image_size[0]*$imgpreviewsize)." </span></li><li class="alt"><span class="attribute">height</span><span>=</span><span class="attribute-value">".($image_size[1]*$imgpreviewsize);"</span><span> </span></li><li><span>echo " </span><span class="attribute">alt</span><span>="图片预览:r文件名:". </span></li><li class="alt"><span>$destination."r上传时间:" </span><span class="tag">/></span><span>"; </span> </li> <li><span>} </span></li> <li class="alt"><span>} </span></li> <li> <span class="tag">?></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> /body</span><span class="tag">></span><span> </span> </li> <li> <span class="tag"><</span><span> /html</span><span class="tag">></span><span> </span> </li> </ol>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。
