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

PHP画像に中国語の透かしを追加してコード共有を実現

高洛峰
リリース: 2023-03-02 18:50:01
オリジナル
1138 人が閲覧しました

例1
コードのコピー コードは以下のとおりです:
Header("Content-type: image/png") /*画像を出力することをブラウザに通知*/
$im = imagecreate (400, 300); /*画像のサイズを定義します*/
$gray = ImageColorAllocate($im, 235, 235, 235);
$pink = ImageColorAllocate($im, 255, 128, 255); fontfile = "simkai.ttf";
/* $fontfile フォントのパスは、オペレーティング システムに応じて、simhei.ttf (Helvetica)、SIMKAI.TTF (Kaili)、SIMFANG.TTF (Imitation Song Princess) になります。 SIMSUN.TTC (宋王朝と新宋王朝) など GD は中国語フォントをサポートします*/
$str = iconv('GB2312','UTF-8','中国語ウォーターマーク') /*gb2312 文字セットを UTF に変換します。 -8 文字*/
ImageTTFText($im, 30 , 0, 100, 200, $pink , $fontfile , $str);
/* 中国語の透かしを追加*/
Imagepng($im)
ImageDestroy($im); ;
?>

例 2
コードをコピーする コードは次のとおりです:
// ****************** *************** * //
// 関数: 画像にテキストを追加します
// パラメーター: $img 画像ファイル名
// $new_img 画像ファイル名を保存します (場合)空です。画像を保存しないことを意味します
// $text 文字列内容
// text_size 文字列サイズ
// text_angle フォント文字列出力角度
// text_x 文字列出力 x 座標
// text_y 文字列出力 y 座標
/ / $text_font フォントファイル名
// $r,$g,$ b 文字列カラー RGB 値
// ************************** ************** / /
function img_text($img, $new_img, $text, $text_size, $text_angle, $text_x, $text_y, $text_font, $r, $g, $b){
$text=iconv("gb2312","UTF-8",$text);
Header("コンテンツタイプ: image/gif")
$im = @imagecreatefromstring(file_get_contents($img)) ) または die ("画像を開けませんでした!");
$color = ImageColorAllocate($im, $r,$g,$b);
//ImageTTFText(int im, int size, int angle, int x, int) y, int col, string fontfile, string text):
//This この関数は、TTF (TrueType フォント) フォント テキストを画像に書き込みます。
//パラメータ: size はフォントのサイズです。
// angle は時計回りに計算されたフォントの角度です。0 度は水平 (左から右へ)、90 度はテキストを下から上に示します
/ / 2 つのパラメータ x と y はテキストの座標値です (原点は左上隅です)
//col はテキストの色です
// fontfile はフォント ファイルの名前です。 // text は文字列の内容です。
ImageTTFText($im, $text_size, $text_angle, $text_x, $text_y, $color, $text_font, $text);
if ($new_img==""): // しないでください。 save Picture、表示のみ
else:
ImageGif($im,$new_img); // 画像を保存しますが、表示されません
ImageDestroy($im); // グラフィックを終了し、メモリ領域を解放します
}
? >

例 3
コードをコピーする コードは次のとおりです:
/*
* 関数: PHP 画像透かし (透かしは画像またはテキストをサポートします)
* パラメーター:
* $groundImage 背景画像、透かしを入れる必要がある画像。一時的に GIF、JPG、PNG 形式のみをサポートします。
* $waterPos 透かし位置、10 個の状態があり、0 はランダムな位置です。
* 1 は左上、2 は中央上、3 です。右上です。
* 4 は左中央、5 は中央、6 は右下です。
* 7 は左下、8 は中央下、9 は右下です。つまり、透かしとして使用される画像は、現在 GIF、JPG、PNG 形式のみをサポートします
* $waterText テキスト透かし、つまり、テキストは透かしとして使用され、ASCII コードをサポートします。
* $textFont テキストはサポートされません。サイズ、値は 1、2、3、4 または 5、デフォルトは 5 です。
* $textColor テキストの色、値は 16 進数の色の値、デフォルトは #FF0000 (赤) です。 GD 2.0 をサポート、FreeType、GIF Read、GIF Create、JPG、PNG をサポート
* $ WaterImage と $waterText を同時に使用しないことをお勧めします。どちらかを選択し、最初に $waterImage を使用してください。
* $waterImage が有効な場合、パラメータ $waterString、$stringFont、および $stringColor は無効になります。
* 透かし入り画像のファイル名は$groundImageと同じです。
* 著者:longware @ 2004-11-3 14:15:13
*/
function imageWaterMark($groundImage,$waterPos=0,$waterImage=””,$waterText=””,$textFont=5,$textColor =”#FF0000″)
{
$isWaterImage = FALSE;
$formatMsg = “このファイル形式はまだサポートされていません。画像を GIF、JPG、または PNG 形式に変換してください。”;ウォーターマーク ファイルの読み取り
if(!emptyempty($waterImage) && file_exists($waterImage))
{
$isWaterImage = TRUE;
$water_w = $water_info[0];//Getウォーターマーク画像の幅
$water_h = $water_info[1];//ウォーターマーク画像の高さを取得します
switch($water_info[2])//ウォーターマーク画像の形式を取得します
{
case 1:$water_im = imagecreatefromgif($waterImage);break;
case 2:$water_im = imagecreatefromjpeg($waterImage);break; case 3 :$water_im = imagecreatefrompng($waterImage);break;
default:die($formatMsg)
}
}
//背景画像を読み取る
if(!emptyempty($groundImage) && file_exists($groundImage))
{
$ground_info = getimagesize($groundImage);
$ground_w = $ground_info[0];// 背景画像の幅を取得する
$ground_h = $ground_info[1];// 背景画像の高さを取得する
switch($ground_info[ 2])// 背景画像の形式を取得します
{
case 1:$ground_im = imagecreatefromgif($groundImage);break;
case 2:$ground_im = imagecreatefromjpeg($groundImage);break; case 3:$ground_im = imagecreatefrompng ($groundImage);break;
default:die($formatMsg)
}
}
else
{
die("透かしを入れる必要のある画像が存在しません!"); }
//ウォーターマークの位置
if($ isWaterImage)//画像のウォーターマーク
$w = $water_w;
$label = "画像"
}
else//テキストのウォーターマーク
{
$temp = imagettfbbox(ceil($ textFont*5),0,”./cour.ttf”,$waterText);//TrueType フォントを使用してテキストの範囲を取得します
$w = $temp[2] - $temp [6];
$h = $temp[3] - $temp[7];
$label = "テキストエリア"; ($ground_h<$h) )
{
echo "ウォーターマークを入れる必要がある画像の長さまたは幅がウォーターマーク「.$label.」より小さいため、ウォーターマークを生成できません! ”;
return;
}
switch($waterPos)
{
case 0://random
$posX = rand(0,($ground_h); - $h));
break;
case 1://1 は左上
$posY = 0;
case 2://2 は上中央
$posX =
$posY = 0;
$posY = 0;
$posY = 0; //4 は左側の中央です
$posX = 0;
$posY = ($ground_h - $h) / 2;
case 5://5 は中央の中央です
$posX = ( $ground_w - $w ) / 2;
$posY = ($ground_h - $h) / 2;
case 6://6 は右中央です
$posX = $ground_w - $w; = ($ground_h - $h) / 2;
case 7://7 は左にあることを意味します
$posY = $ground_h - $h; ://8 は中央にあります
$posX = ($ground_w - $w) / 2;
case 9://9 は右下です
$ posX = $ground_w - $w;
$posY = $ground_h - $h;
default://random
$posX = rand(0,($ground_w - $w)); 0,($ground_h - $h) ; posY, 0, 0, $water_w,$water_h);//ウォーターマークを対象ファイルにコピー
}
else//テキストウォーターマーク
{
if( !emptyempty($textColor) ) && (strlen($textColor)==7) )
{
$R = hexdec(substr($textColor,1,2))
$G = hexdec(substr($textColor,3,2)); $B = hexdec(substr($textColor,5) );
}
else
{
die("ウォーターマークのテキストの色の形式が正しくありません。 ”);
}
imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
//ウォーターマーク生成後の画像
@unlink($groundImage);
switch($ground_info[2])// 背景画像の形式を取得します
{
case 1:imagegif($ground_im,$groundImage);break;
case 2:imagejpeg($) ground_im,$ groundImage);break;
case 3:imagepng($ground_im,$groundImage);break;
default:die($errorMsg);
//メモリを解放する
if(isset($water_info)) $water_info) ;
if(isset($water_im))
unset($ground_im)
//———————————— —— ——————————————
$id=$_REQUEST['id'];
$num = count($_FILES['userfile']['name']); ($ _FILES['ユーザーファイル']);
print_r($_FILES['ユーザーファイル']['名前']);
echo “
”; {
for($i=0;$iif(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size']>0)
{
$uploadfile = “./”.time() .”_”.$_FILES['ユーザーファイル'][名前][$i]; 
エコー「
」; 
echo $uploadfile; 
if (copy($_FILES['userfile']['tmp_name'][$i], $uploadfile))
{
echo “OK
”; 
//文字水印
//imageWaterMark($uploadfile,5,”",”HTTP://www.lvye.info”,5,”#cccccc”);
//图片水印
$waterImage=”logo_ok1. gif”;//水印图片路径
imageWaterMark($uploadfile,9,$waterImage);
echo “”; 
}
else
{
echo “Fail
”; 
}
}
}
}
?> 

 
for($a=0;$a<$id;$a++){
echo “文件:
” ; 
}
?> 
 
 

代 4
复制代 代码如下:
增加中文水印
/*---------------------------- ---------------------------------
**説明:これは、図片上部の水印を指定するために使用されます(不占用画像表示領域)の独自の種類、オブジェクトの構築が必要です
**创建:2007-10-09
**更新:2007-10-09
**说説明:1、gd库サポートが必要、iconvサポートが必要( php5 すでに包含不使用追加ダウンロード)
2、3 つの種類の画像のみを組み合わせた、jpg/jpeg/gif/png、その他の種類は処理されません
3、注意画像の場所のプロパティは必ず写すことができます
4、调用例:
$objImg = 新しいMyWaterDown Chinese(); 
$objImg->パス = "images/"; 
$objImg->ファイル名 = "1.jpg"; 
$objImg->Text = "HAHAKONGJIAN[url]HTTP://HI.BAIDU.COM/LYSONCN[/url]"; 
$objImg->Font = "./font/simhei.ttf"; 
$objImg->Run(); 
**成员関数:
------------------------------------------ ----------*/
class MyWaterDown Chinese{
var $Path = "./"; //この種のページの相対的な経路
var $FileName = ""; //写真の名前、例“1.jpg”
var $Text = ""; //图片要上加水印文字,支持中文
var $TextColor = "#ffffff"; //文字の色、gif画像時、文字体色のみ黑色
var $TextBgColor = "#000000"; //文字の背景条の颜色
var $Font = "c://windows//fonts//simhei.ttf"; //文字体の生存目录、相对路径
var $OverFlag = true; // 原図を被るかどうか、被るとみなされる、被らない場合、自動的に原画像ファイル名後+"_water_down"、例えば“1.jpg”=> "1_water_down.jpg"
var $BaseWidth = 200; // 画像の強度は少なくとも 200 以上で、上に水印文字を追加できます。
//---------------------------- --------------------------------------
// 機能:类的构造関数数(php5. 0 以上の形式)
//パラメータ:無し
//戻り:無し
function __construct(){;}
//---------------------- ----------------------------------------
// 機能:类的解析関数(php5.0以降の形式)
//パラメータ:無し
//戻り:無し
function __destruct(){;}
//--------------- -------------------------------------------------- -
//------------------------------------
// 機能:对象运行関数数,给画像加上水印
//パラメータ:無し
//戻り:無し
function Run()
{
if($this->FileName == "" || $this->Text == "")
戻る; 
//检测是否安装GD库
if(false == function_exists("gd_info"))
{
echo "系统没有安装GD库,给图片加水印。"; 
戻る; 
}
//設置输入、输出图片路径名
$arr_in_name =explode(".",$this->FileName); 
//
$inImg = $this->Path.$this->FileName; 
$outImg = $inImg; 
$tmpImg = $this->Path.$arr_in_name[0]."_tmp.".$arr_in_name[1]; // 一時的に処理する画像、重要
if(!$this->OverFlag)
$outImg = $this->Path.$arr_in_name[0]."_water_down.".$arr_in_name[1]; 
//检测图片が存在するかどうか
if(!file_exists($inImg))
return ; 
// 画像の属性を取得します
$groundImageType = @getimagesize($inImg);
$imgHeight = $groundImageType[2]; if( $imgWidth < $this->BaseWidth) //基本幅より小さい場合は処理されません
return; //画像がjpg/jpeg/gif/pngでない場合は処理されます処理されません
switch($imgType)
{
case 1:
$image = imagecreatefromgif($inImg);
$this->TextBgColor = "#ffffff"; // GIF 画像のフォントは黒のみですなので、背景色は白に設定されます
break;
$image = imagecreatefromjpeg($inImg);
default:
return;
break;
}
//カラーを作成
$color = @imagecolorallocate($image,hexdec(substr($this->TextColor,1,2)),hexdec(substr($this->TextColor, 3,2)),hexdec(substr($this->TextColor,5, 2))); //テキストの色
//空の画像を生成し、その高さにより下部のウォーターマークの高さが増加します
$newHeight = $ imgHeight+20;
$objTmpImg = @imagecreatetruecolor($imgWidth,$newHeight);
$colorBg = @imagecolorallocate($objTmpImg,hexdec(substr($this->TextBgColor,1,2)),hexdec($ this->TextBgColor,3,2)),hexdec(substr($this- >TextBgColor,5,2))); //背景色
//塗りつぶされた画像の背景色
@imagefill ($objTmpImg, 0,0,$colorBg);
//元の画像を一時画像にコピー
@imagecopy($objTmpImg,$image,0,0,0,0,$imgWidth,$imgHeight);書き込むテキストオブジェクト
$objText = $this->createText($this-> ;Text);
//書き込むウォーターマークテキストの位置を計算する
$x = 5; 5;
//テキスト透かしを書き込みます
@imagettftext($objTmpImg,10,0,$ x,$y,$color,$this->Font,$objText);
//新しい画像、一時的な画像を生成します
switch($imgType)
ケース 1:
imagegif($objTmpImg,$tmpImg)
ケース 2:
imagejpeg($objTmpImg) ; ,$tmpImg);
default:
return;
@imagedestroy($objTmpImg);
if($this->OverFlag);
{
//元の画像を上書きします
@unlink($inImg );
@rename($tmpImg,$outImg)
}
else
{
//元の画像を上書きしません
@rename($tmpImg, $outImg);
}
}
//------ --------------------------------
//関数: ウォーターマーク テキスト オブジェクトを作成します
//パラメータ: なし
// 戻り値: 作成されたウォーターマーク テキスト オブジェクト
function createText($instring)
{
$outstring="";
for($i=0;$i{
$h=ord($instring[$i]);
if($h>=160 && $i{
$outstring .= "".base_convert(bin2hex(iconv ("gb2312","ucs-2",substr($instring,$i,2))),16,10).";";
$i++;
else
{
$outstring .= $instring [$i]
}
return $outstring
?>

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート