ホームページ バックエンド開発 PHPチュートリアル 画像に中国語の透かしを追加する PHP コード

画像に中国語の透かしを追加する PHP コード

Jul 25, 2016 am 09:08 AM

  1. Header("Content-type: image/png") /*画像を出力することをブラウザに通知*/
  2. $im = imagecreate(400, 300);画像のサイズを定義します*/
  3. $gray = ImageColorAllocate($im, 235, 235, 235);
  4. $pink = ImageColorAllocate($im, 255, 128, 255);
  5. $fontfile = "simkai.ttf";
  6. / * $fontfile フォントのパスはオペレーティング システムに応じて、simhei.ttf (Heold)、SIMKAI.TTF (Italic)、SIMFANG.TTF (Imitation Song)、SIMSUN.TTC (Song style & New Song style) になります。 GD でサポートされているその他の中国語フォント*/
  7. $str = iconv('GB2312','UTF-8','中国語の透かし') /*gb2312 文字セットを UTF-8 文字に変換します*/
  8. ImageTTFText($im, 30, 0, 100, 200, $pink , $fontfile , $str);
  9. /* 中国語の透かしを追加*/
  10. Imagepng($im);
  11. ImageDestroy($im);
  12. ?>
コードをコピー

例 2:

  1. // ----------------------- //
  2. // 機能: 写真にテキストを追加します
  3. //パラメータ: $img 画像ファイル名
  4. // $new_img 保存画像ファイル名、空の場合は画像を保存しないことを意味します
  5. // $text string content
  6. // text_size 文字列サイズ
  7. // text_angle フォント文字列出力角度
  8. / / text_x文字列出力 x 座標
  9. // text_y 文字列出力 y 座標
  10. // $text_font フォント ファイル名
  11. // $r, $g, $b 文字列の色 RGB 値
  12. // ------ ------ ------------ //
  13. function img_text($img, $new_img, $text, $text_size, $text_angle, $text_x, $text_y, $text_font, $ r, $g, $b ){
  14. $text=iconv("gb2312","UTF-8",$text);
  15. Header("Content-type: image/gif");
  16. $im = @imagecreatefromstring( file_get_contents($img)) またはdie ("画像を開けませんでした!");
  17. $color = ImageColorAllocate($im, $r,$g,$b);
  18. //ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text):
  19. //この関数は、TTF (TrueType フォント) フォント テキストを画像に書き込みます。
  20. //パラメータ: size はフォントのサイズです。
  21. // angle は時計回りに計算されたフォントの角度です。0 度は水平 (左から右へ)、90 度はテキストを下から上に示します
  22. / / 2 つのパラメータ x と y はテキストの座標値です (原点は左上隅です)
  23. //col はテキストの色です
  24. // fontfile はフォント ファイルの名前です。 // text は文字列の内容です。
  25. ImageTTFText($im, $text_size, $text_angle, $text_x, $text_y, $color, $text_font, $text);
  26. if ($new_img==""):
  27. ImageGif($im); // save Picture、表示のみ
  28. else:
  29. ImageGif($im,$new_img); //画像を保存しますが、表示されません
  30. endif;
  31. ImageDestroy($im); //グラフィックを終了し、メモリ領域を解放します
  32. }
  33. ? >
コードをコピー

例3:

  1. /*
  2. * 関数: PHP 画像透かし (透かしは画像またはテキストをサポートします)
  3. * パラメーター:
  4. * $groundImage 背景画像、つまり、透かしを入れる必要がある画像、現在のみGIF、JPG、PNG 形式をサポートします。
  5. * $waterPos ウォーターマークの位置は 10 個あり、0 はランダムな位置です。
  6. * 1 は左上、2 は中央上、3 は右上です。 5 は中央の中央、6 は右側にあることを意味します
  7. * 7 は左側の下部、8 は右側の下部にあります
  8. * $waterImage 画像の透かし。 、つまり、透かしとして使用される画像は、現在 GIF、JPG、および PNG 形式のみをサポートします。
  9. * $waterText テキスト透かし、つまり、テキストは透かしとして使用され、ASCII コードをサポートしますが、中国語はサポートされません
  10. * $textFont テキストのサイズ、値は 1、2、3、4、または 5、デフォルトは 5 です。
  11. * $textColor テキストの色、値は 16 進数の色の値、デフォルトは #FF0000 (赤) です。 * 注: GD 2.0 をサポート、FreeType、GIF Read、GIF Create、JPG、PNG をサポート
  12. * $waterImage と $waterText が最も多く、同時に使用しないことをお勧めします。どちらか 1 つを選択し、$ を使用してくださいまずは水の画像。
  13. * $waterImage が有効な場合、パラメータ $waterString、$stringFont、および $stringColor は無効になります。
  14. * 透かし入り画像のファイル名は$groundImageと同じです。
  15. * 著者:longware @ 2004-11-3 14:15:13
  16. */
  17. function imageWaterMark($groundImage,$waterPos=0,$waterImage=””,$waterText=””,$textFont=5,$textColor =”#FF0000″)
  18. {
  19. $isWaterImage = FALSE;
  20. $formatMsg = “このファイル形式はまだサポートされていません。画像を GIF、JPG、または PNG 形式に変換するには、画像処理ソフトウェアを使用してください。”;
  21. //ウォーターマークファイルを読み取ります
  22. if(!emptyempty($waterImage) && file_exists($waterImage))
  23. {
  24. $isWaterImage = TRUE;
  25. $water_info = getimagesize($waterImage);
  26. $water_w = $water_info[ 0 ];//ウォーターマーク画像の幅を取得
  27. $water_h = $water_info[1];//ウォーターマーク画像の高さを取得
  28. switch($water_info[2])//ウォーターマーク画像の形式を取得
  29. {
  30. ケース 1:$water_im = imagecreatefromgif($waterImage);break;
  31. ケース 2:$water_im = imagecreatefromjpeg($waterImage);break;
  32. ケース 3:$water_im = imagecreatefrompng($waterImage);break;
  33. default:die( $formatMsg);
  34. }
  35. }
  36. //背景画像を読み取ります
  37. if(!emptyempty($groundImage) && file_exists($groundImage))
  38. {
  39. $ground_info = getimagesize($groundImage);
  40. $ground_w = $ground_info[ 0];// 背景画像の幅を取得
  41. $ground_h = $ground_info[1];// 背景画像の高さを取得
  42. switch($ground_info[2])// 背景画像の形式を取得
  43. {
  44. case 1:$ground_im = imagecreatefromgif($ groundImage);break;
  45. case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
  46. case 3:$ground_im = imagecreatefrompng($groundImage);break;
  47. default:die ($formatMsg);
  48. }
  49. }
  50. else
  51. {
  52. die("透かしを入れる必要のある画像が存在しません!");
  53. }
  54. //透かしの位置
  55. if($isWaterImage)//画像の透かし
  56. {
  57. $w = $water_w;
  58. $h = $water_h;
  59. $label = "画像";
  60. }
  61. else//テキストの透かし
  62. {
  63. $temp = imagettfbbox(ceil($textFont*5),0,"。 /cour.ttf",$waterText);//TrueType フォントを使用したテキストの範囲を取得します
  64. $w = $temp[2] - $temp[6];
  65. $h = $temp[3] - $temp[7 ];
  66. unset($temp);
  67. $label = "テキストエリア";
  68. }
  69. if( ($ground_w<$w) || ($ground_h<$h) )
  70. {
  71. echo "テキストエリアの長さまたは幅ウォーターマークを入れる必要がある画像はウォーターマーク「.$label」より長いです。小さいため、ウォーターマークを生成できません。 ”;
  72. return;
  73. }
  74. switch($waterPos)
  75. {
  76. case 0://random
  77. $posX = rand(0,($ground_w - $w));
  78. $posY = rand(0,($ground_h) - $h));
  79. break;
  80. case 1://1 は左上を意味します
  81. $posX = 0;
  82. $posY = 0;
  83. break;
  84. case 2://2 は中央上を意味します
  85. $posX = ($ ground_w - $w) / 2;
  86. $posY = 0;
  87. break;
  88. case 3://3 は右上です
  89. $posX = $ground_w - $w;
  90. $posY = 0;
  91. break;
  92. case 4 : //4 は中央左を意味します
  93. $posX = 0;
  94. $posY = ($ground_h - $h) / 2;
  95. break;
  96. case 5://5 は中央中央を意味します
  97. $posX = ($ground_w - $w ) / 2;
  98. $posY = ($ground_h - $h) / 2;
  99. break;
  100. case 6://6 は中右です
  101. $posX = $ground_w - $w;
  102. $posY = ($ground_h - $ h) / 2;
  103. break;
  104. case 7://7 は、下が左側にあることを意味します
  105. $posX = 0;
  106. $posY = $ground_h - $h;
  107. break;
  108. case 8://8 は、一番下は中央です
  109. $posX = ($ground_w - $w) / 2;
  110. $posY = $ground_h - $h;
  111. break;
  112. case 9://9 は右下です
  113. $posX = $ground_w - $ w;
  114. $posY = $ground_h - $h;
  115. break;
  116. default://random
  117. $posX = rand(0,($ground_w - $w));
  118. $posY = rand(0,($ground_h - $h) );
  119. break;
  120. }
  121. //画像ブレンドモードを設定します
  122. imagealphablending($ground_im, true);
  123. if($isWaterImage)//画像ウォーターマーク
  124. {
  125. imagecopy($ground_im, $water_im, $posX , $ posY, 0, 0, $water_w,$water_h);//ウォーターマークを対象ファイルにコピー
  126. }
  127. else//テキストウォーターマーク
  128. {
  129. if( !emptyempty($textColor) && (strlen($textColor) ==7) )
  130. {
  131. $R = hexdec(substr($textColor,1,2));
  132. $G = hexdec(substr($textColor,3,2));
  133. $B = hexdec(substr($ textColor,5) );
  134. }
  135. else
  136. {
  137. die("透かしのテキストの色の形式が正しくありません。”);
  138. }
  139. imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
  140. }
  141. // 水印後の画像
  142. を生成@unlink($groundImage);
  143. switch($ground_info[2])//背景画像取得の格式
  144. {
  145. case 1:imagegif($ground_im,$groundImage);break;
  146. case 2:imagejpeg($ground_im,$ groundImage);break;
  147. case 3:imagepng($ground_im,$groundImage);break;
  148. default:die($errorMsg);
  149. }
  150. //释放内存続
  151. if(isset($water_info)) unset($water_info) ;
  152. if(isset($water_im)) imagedestroy($water_im);
  153. unset($ground_info);
  154. imagedestroy($ground_im);
  155. }
  156. //———————————————— —————————————
  157. $id=$_REQUEST['id'];
  158. $num = count($_FILES['userfile']['name']);
  159. print_r($ _FILES['userfile']);
  160. print_r($_FILES['userfile']['name']);
  161. echo $num;
  162. echo “
    ”;
  163. if(isset($id)){
  164. for($i=0;$iif(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size'] >0)
  165. {
  166. $uploadfile = “./”.time().”_”.$_FILES['userfile'][name][$i];
  167. echo “
    ”;
  168. echo $ Uploadfile;
  169. if (copy($_FILES['userfile']['tmp_name'][$i], $uploadfile))
  170. {
  171. echo “OK
    ”;
  172. //文字水印
  173. //imageWaterMark($ Uploadfile,5,”",”HTTP://www.lvye.info”,5,”#cccccc”);
  174. //图片水印
  175. $waterImage=”logo_ok1.gif”;//水印图片路径
  176. imageWaterMark( $uploadfile,9,$waterImage);
  177. echo “”;
  178. }
  179. else
  180. {
  181. echo “Fail
    ”;
  182. }
  183. }
  184. }
  185. }
  186. ?>
  187. for($a=0;$a<$id; $a++){
  188. echo “文件:
    ”;
  189. }
  190. ?>
复制代

例 4、中国語の透かしを追加:

  1. /*--------------

  2. **説明: これは、指定された画像に下部の透かしを追加するために使用されます (画像表示領域を占有しない)、オブジェクト呼び出しを作成する必要があります
  3. **注: 1. gd ライブラリのサポートと iconv サポートが必要です (php5 には既に含まれており、ロードする必要はありません)
  4. 2. 3 つのタイプにのみ適しています。画像、jpg/jpeg/gif /png、その他のタイプは処理されません
  5. 3. 画像が配置されているディレクトリの属性は書き込み可能でなければならないことに注意してください
  6. 4. 呼び出し例:
  7. $objImg = new MyWaterDown Chinese();
  8. $objImg->Path = "images/";
  9. $objImg ->FileName = "1.jpg";
  10. $objImg->Text = "HAHAKONGJIAN[url]HTTP://HI.BAIDU.COM/LYSONCN [/url]";
  11. $objImg->Font = " ./font/simhei.ttf";
  12. $objImg->Run();
  13. **メンバー関数:
  14. -------- ----*/
  15. class MyWaterDown Chinese{
  16. var $Path = "./"; //このクラスを呼び出すページからの、画像が配置されているディレクトリの相対パス
  17. var $FileName = "" / /画像の名前 (例: "1.jpg") $Text = "" // 画像に追加する透かしテキストは中国語をサポートします
  18. var $TextColor = "#ffffff"; GIF 画像の場合、フォントの色は黒のみです
  19. var $TextBgColor = "#000000" //テキストの色 背景バーの色
  20. var $Font = "c://windows//fonts; //simhei.ttf"; //フォント格納ディレクトリ、相対パス
  21. var $OverFlag = true; //元画像に上書きするかどうか、デフォルト 上書きする場合、カバーしない場合は元画像ファイル名の後ろに自動的に「_water_down」を追加例: "1.jpg" => "1_water_down.jpg"
  22. var $BaseWidth = 200; //画像の幅は少なくとも >=200 である必要があり、透かしテキストが追加されます。
  23. //----------------
  24. //関数: クラスコンストラクター (php5.0 以降)
  25. //パラメータ: なし
  26. //戻り値: なし
  27. function __construct() {;}
  28. //---------------
  29. //関数: クラス デストラクター (php5.0 以降)
  30. //パラメーター: なし
  31. / /戻り値: なし
  32. function __destruct (){;}
  33. //-------------

  34. //関数: オブジェクトに対して関数を実行し、画像のウォーターマークに追加します

  35. / /パラメータ: なし
  36. //Return: なし
  37. function Run()
  38. {
  39. if($this->FileName == "" || $this->Text == "")
  40. return;
  41. //Check GD ライブラリがインストールされているかどうか
  42. if(false == function_exists("gd_info"))
  43. {
  44. echo "システムには GD ライブラリがインストールされていないため、画像にウォーターマークを追加できません。";
  45. return;
  46. }
  47. //入力、出力画像のパス名を設定
  48. $arr_in_name =explode(".",$this->FileName);
  49. //
  50. $inImg = $this->Path.$this->FileName;
  51. $ outImg = $inImg;
  52. $tmpImg = $this->Path.$arr_in_name[0]."_tmp.".$arr_in_name[1] //一時的に処理された画像、非常に重要です
  53. if(!$this-> OverFlag)
  54. $ outImg = $this->Path.$arr_in_name[0]."_water_down.".$arr_in_name[1];
  55. //画像が存在するか確認
  56. if(!file_exists($inImg))
  57. return ;
  58. //画像プロパティを取得します
  59. $groundImageType = @getimagesize($inImg);
  60. $imgWidth = $groundImageType[0];
  61. $imgHeight = $groundImageType[1];
  62. $imgType = $groundImageType[2];
  63. if ($imgWidth < ; $this->BaseWidth) //基本幅より小さい場合は処理されません
  64. return;
  65. //画像がjpg/jpeg/gif/pngでない場合は処理されません処理される
  66. switch($imgType)
  67. {
  68. case 1:
  69. $image = imagecreatefromgif($inImg);
  70. $this->TextBgColor = "#ffffff"; //GIF画像のフォントは黒のみです。したがって、背景色は白に設定されます
  71. break;
  72. case 2:
  73. $image = imagecreatefromjpeg( $inImg);
  74. break;
  75. case 3:
  76. $image = imagecreatefrompng($inImg);
  77. break;
  78. default:
  79. return ;
  80. break;
  81. }
  82. //カラーを作成します
  83. $color = @imagecolorallocate($image, hexdec(substr($this->TextColor,1,2)),hexdec(substr($this->TextColor,3) ,2)),hexdec(substr($this->TextColor,5,2)) ); //テキストの色
  84. //空の画像を生成し、その高さは下部の透かしの高さだけ増加します
  85. $newHeight = $imgHeight+20;
  86. $objTmpImg = @imagecreatetruecolor($imgWidth,$newHeight);
  87. $colorBg = @imagecolorallocate($objTmpImg,hexdec(substr($this->TextBgColor,1,2)),hexdec(substr( $this->TextBgColor,3,2)),hexdec(substr($this->TextBgColor ,5,2))); //背景色
  88. //画像の背景色を塗りつぶします
  89. @imagefill ($ objTmpImg,0,0,$colorBg);
  90. //元の画像を一時画像にコピー
  91. @imagecopy( $objTmpImg,$image,0,0,0,0,$imgWidth,$imgHeight);
  92. //作成書き込まれるウォーターマーク テキスト オブジェクト
  93. $objText = $this->createText($this->Text) ;
  94. //書き込まれるウォーターマーク テキストの位置を計算します
  95. $x = 5;
  96. $y = $ newHeight-5;
  97. //テキストの透かしを書き込みます
  98. @imagettftext($objTmpImg,10,0,$x,$ y,$color,$this->Font,$objText);
  99. //新しい画像を一時的に生成しますphotos
  100. switch($imgType)
  101. {
  102. case 1:
  103. imagegif($objTmpImg,$tmpImg);
  104. break ;
  105. case 2:
  106. imagejpeg($objTmpImg,$tmpImg);
  107. break;
  108. case 3:
  109. imagepng( $objTmpImg,$tmpImg);
  110. break;
  111. default:
  112. return;
  113. break;
  114. }
  115. //リソースを解放
  116. @imagedestroy($objTmpImg);
  117. @imagedestroy($image);
  118. //ファイルの名前を変更します
  119. if ($this->OverFlag)
  120. {
  121. //元の画像を上書きします
  122. @unlink($inImg);
  123. @rename($tmpImg,$outImg);
  124. }
  125. else
  126. {
  127. //元の画像を上書きしないimage
  128. @rename($tmpImg,$outImg);
  129. }
  130. }
  131. //------
  132. / /Function: ウォーターマーク テキスト オブジェクトを作成します
  133. //Parameters: なし
  134. //Return: 作成されたウォーターマーク テキスト オブジェクト
  135. function createText($instring)
  136. {
  137. $outstring="";
  138. $max=strlen($instring);
  139. for($i=0;$i<$max;$i++)
  140. {
  141. $h=ord( $instring[$i]);
  142. if($h>=160 && $i<$max-1)
  143. {
  144. $outstring .= "&#".base_convert(bin2hex(iconv("gb2312","ucs- 2",substr($instring,$i,2))),16,10).";";
  145. $i++;
  146. }
  147. else
  148. {
  149. $outstring .= $instring[$i];
  150. }
  151. }
  152. return $outstring;
  153. }
  154. }//class
  155. ?>

コードをコピー



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

See all articles