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

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

WBOY
WBOYオリジナル
2016-07-25 09:08:09907ブラウズ
  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 までご連絡ください。