ホームページ >バックエンド開発 >PHPチュートリアル >PHP は位置と透明度を含むウォーターマークを生成します_PHP チュートリアル
/*
みなさんにもお勧めします!主に画像のトリミング、拡大縮小、透かし入れなどが含まれます。ここでは簡単な使用方法をいくつか紹介します。
include("imageclass.php"); //ここでimageclass.phpのパスに注意してください
$imgs=新しい画像();
$imgs->param($tempFile);
if(!$imgs->thumb($targetFile,600,500))die('--画像のアップロードに失敗しました!') //画像をズームします
$imgs->water($targetFile,$water,$pos=0,$pct=50); には主に 2 つのパラメータが含まれます。$targetFile はサーバーにアップロードされたファイル パス、$water はウォーターマーク画像です。 $pos は透かし画像の位置、$pct は透明度です。
$pos の場所の説明:0://ランダム
1://1 は上が左側にあることを意味します
2://2が上部中央です
3/3 は上が右側であることを意味します
4://4 は中心が左側にあることを意味します
5:5は真ん中にあります
6/6 は中心が右側にあることを意味します
7:7は下が左という意味です
8/8 は中央下を意味します
9:/9は下が右という意味です
// の内容を imageclass.php に保存すると呼び出すことができます。
//////////////////////////////////////////////// /// /////////////
*/
?>
/* +---------------------------------------------- --- ---------------+
* | 著作権 (c) 2008-2009 Diqiye.Com 無断複写・転載を禁じます
* +------------------------------------------------ -------------+
* | 情報: 画像処理クラス
* +------------------------------------------------ -------------+
*/
クラスイメージ{
//現在の写真
保護 $img;
// 画像タイプ対応表
protected $types = array(
1 = & gt;
2 = & gt; 'jpg'、
3 = & gt;
6 => 'bmp'
);
// 画像
パブリック関数 __construct($img=''){
!$img && $this->param($img);
}
// 情報
パブリック関数 param($img){
$this->img = $img;
$this を返す;
}
// 画像情報
パブリック関数 getImageInfo($img){
$info = @getimagesize($img);
If(isset($this->types[$info[2]])){
$info['ext'] = $info['type'] = $this->types[$info[2]];
} 他{
$info['ext'] = $info['type'] = 'jpg';
}
$info['type'] == 'jpg' && $info['type'] = 'jpeg';
$info['size'] = @filesize($img);
$info を返す;
}
//サム(新しい画像アドレス、幅、高さ、トリミング、ズームイン可能)
パブリック関数thumb($filename,$new_w=160,$new_h=120,$cut=0,$big=0){
// 元の画像情報を取得します
$info = $this->getImageInfo($this->img);
If(!empty($info[0])) {
$old_w = $info[0];
$old_h = $info[1];
$type = $info['type'];
unset($info);
// 元の画像がサムネイルより小さく、拡大が許可されていない場合
If($old_w < $new_h && $old_h < $new_w && !$big){
return false;
}
// 画像をトリミングします
if($cut == 0){ // 等比例級数
$scale = min($new_w/$old_w, $new_h/$old_h); // スケーリング率を計算します
$width = (int)($old_w*$scale); // サムネイルのサイズ
$height = (int)($old_h*$scale);
$start_w = $start_h = 0;
$end_w = $old_w;
$end_h = $old_h;
} elseif($cut == 1){ // 中央中央の切り抜き
$scale1 =round($new_w/$new_h,2);
$scale2 =round($old_w/$old_h,2);
If($scale1 > $scale2){
$start_w = ($old_w-$end_w)/2;
$start_h = 0;
$end_h = $old_h;
}
$width = $new_w;
$height= $new_h;
} elseif($cut == 2){ // 左上裁剪
$scale1 =round($new_w/$new_h,2);
$scale2 =round($old_w/$old_h,2);
if($scale1 > $scale2){
$end_h =round($old_w/$scale1,2);
$end_w = $old_w;
} 他{
$end_w =round($old_h*$scale1,2);
$end_h = $old_h;
}
$start_w = 0;
$start_h = 0;
$width = $new_w;
$height= $new_h;
}
// ダウンロード入原图
$createFun = 'ImageCreateFrom'.$type;
$oldimg = $createFun($this->img);
// 创建缩略图
if($type!='gif' && function_exists('imagecreatetruecolor')){
$newimg = imagecreatetruecolor($width, $height);
} 他{
$newimg = imagecreate($width, $height);
}
// 复製图片
if(function_exists("ImageCopyResampled")){
ImageCopyResampled($newimg, $oldimg, 0, 0, $start_w, $start_h, $width, $height, $end_w,$end_h);
} 他{
ImageCopyResize($newimg, $oldimg, 0, 0, $start_w, $start_h, $width, $height, $end_w,$end_h);
}
// JPEG グラフィックスのインターレースを設定します
$type == 'jpeg' && imageinterlace($newimg,1);
$imageFun = '画像'.$type;
!@$imageFun($newimg,$filename,100) && die('保存に失敗しました! ディレクトリが存在し、書き込み可能かどうかを確認してください?');
ImageDestroy($newimg);
ImageDestroy($oldimg);
return $filename;
}
false を返す;
}
//water(保存アドレス、透かし画像、透かし位置、透明度)
公共機能水($filename,$water,$pos=0,$pct=50){
$info = $this->getImageInfo($water);
If(!empty($info[0])){
$water_h = $info[1];
$type = $info['type'];
$fun = 'imagecreatefrom'.$type;
$waterimg = $fun($water);
} 他{
falseを返します;
}
$info = $this->getImageInfo($this->img);
If(!empty($info[0])){
$type = $info['type'];
$fun = 'imagecreatefrom'.$type;
$oldimg = $fun($this->img);
} 他{
falseを返します;
}
$water_w >$old_w && $water_w = $old_w;
$water_h >$old_h && $water_h = $old_h;
スイッチ($pos){
case 0://ランダム
$posX = rand(0,($old_w - $water_w));
$posY = rand(0,($old_h - $water_h));
休憩;
case 1://1 は、上が左側にあることを意味します
$posX = 0;
$posY = 0;
休憩;
case 2://2が上部中央です
$posX = ($old_w - $water_w) / 2;
$posY = 0;
休憩;
case 3://3 は、上が右側にあることを意味します
$posX = $old_w - $water_w;
$posY = 0;
休憩;
case 4://4 は中心が左側にあることを意味します
$posX = 0;
$posY = ($old_h - $water_h) / 2;
休憩;
case 5://5 は中央に配置されています
$posX = ($old_w - $water_w) / 2;
$posY = ($old_h - $water_h) / 2;
休憩;
case 6://6は右側の中央です
$posX = $old_w - $water_w;
$posY = ($old_h - $water_h) / 2;
休憩;
case 7://7 は下が左側にあることを意味します
$posX = 0;
$posY = $old_h - $water_h;
休憩;
case 8://8 は下部が中央にあることを意味します
$posX = ($old_w - $water_w) / 2;
$posY = $old_h - $water_h;
休憩;
Case 9://9は右下です
$posX = $old_w - $water_w;
$posY = $old_h - $water_h;
休憩;
デフォルト: // ランダム
$posX = rand(0,($old_w - $water_w));
$posY = rand(0,($old_h - $water_h));
休憩;
}
// 画像の混色モードを設定します
Imagealphablending($oldimg, true);
// 透かしを追加します
Imagecopymerge($oldimg, $waterimg, $posX, $posY, 0, 0, $water_w,$water_h,$pct);
$fun = '画像'.$type;
!@$fun($oldimg, $filename,100) && die('保存に失敗しました! ディレクトリが存在し、書き込み可能かどうかを確認してください?');
imagedestroy($oldimg);
imagedestroy($waterimg);
$filename を返す;
}
}
$imgs=新しい画像();
$tempFile = "./images/hdb.jpg";
$water = "./images/bamiluo.jpg";
$imgs->param($tempFile);
//if(!$imgs->thumb($targetFile,600,500))die('fail');
$imgs->water($targetFile,$water,0,10);
エコー「ああ」;
?>
ws07_byyyさんのコラムより抜粋