この記事の例では、PHP でサムネイルを生成できるファイル アップロード クラスとその使用法について説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです
if ($_GET['action'] == '保存') {
$up = 新しいアップロード(); $up = 新しいアップロード();
$up->set_dir(dirname(__FILE__).'/upload/','{y}/{m}');
$up->set_thumb(100,80); $up->set_thumb(100,80);
$up->set_watermark(dirname(__FILE__).'/jblog/images/watermark.png',6,90);
$fs = $up->execute(); $fs = $up->execute();
var_dump($fs);
}
?>
テスト
<フォーム名="アップロード" メソッド="ポスト" アクション="?アクション=保存" enctype="multipart/form-data" スタイル="マージン:0">
&lt;入力型= "submit" name = "" submit "value =" upload " /&gt;
フォーム>
本文>
次のようにアップロード ファイルをアップロードします:
コードをコピーします
コードは次のとおりです:
クラスのアップロード{
var $dir; //添付ファイルが保存される物理ディレクトリ
var $time; // カスタマイズされたファイルのアップロード時間
var $allow_types; //添付ファイルの種類のアップロードを許可します
var $field // コントロール名をアップロードします
var $maxsize; // 許可される最大ファイル サイズ、単位は KB です
var $thumb_width; //サムネイルの幅
var $thumb_height; //サムネイルの高さ
var $watermark_file //ウォーターマーク画像アドレス
var $watermark_pos; //ウォーターマークの位置
var $watermark_trans;//ウォーターマークの透明度
//オープンソースコード phpfensi.com
//コンストラクター関数
//$types: アップロードが許可されるファイルの種類、$maxsize: 許可されるサイズ、$field: アップロード コントロール名、$time: カスタマイズされたアップロード時間
関数アップロード($types = 'jpg|png', $maxsize = 1024, $field = 'attach', $time = '') {
$this->allow_types =explode('|',$types);
$this->field = $field;
// ファイルを保存する特定のディレクトリを設定および作成します //
//$basedir : ベース ディレクトリ、物理パスである必要があります //$basedir
//$filedir : カスタム サブディレクトリ、使用可能なパラメータ {y}、{m}、{d}
関数 set_dir($basedir,$filedir = '') {
$dir = $basedir;
!is_dir($dir) && @mkdir($dir,0777);
if (!emptyempty($filedir)) {
$filedir = str_replace(array('{y}','{m}','{d}'),array(date('Y',$this->time),date('m',$this ->time),date('d',$this->time)),strto lower($filedir));
$dirs =explode('/',$filedir);
foreach ($dir として $d) {
!emptyempty($d) && $dir .= $d.'/';
!is_dir($dir) && @mkdir($dir,0777);
$this->dir = $dir;
// 画像のサムネイル設定、サムネイルが生成されない場合は設定する必要はありません
//$width: サムネイルの幅、$height: サムネイルの高さ
関数 set_thumb ($width = 0, $height = 0) {
//画像のウォーターマーク設定、ウォーターマークが生成されない場合は設定する必要はありません
//$file: ウォーターマーク画像、$pos: ウォーターマークの位置、$trans: ウォーターマークの透明度
関数 set_watermark ($file, $pos = 6, $trans = 80) {
$this->watermark_trans = $trans;
/*------------------------------------------------ ----------------
ファイルのアップロードを実行し、処理後にアップロードの成功または失敗を含むファイル情報の配列を返します。
ここで、 name はファイル名です。アップロードが成功した場合、それはサーバーにアップロードされたファイル名です。
dir は、添付ファイルがサーバー上に保存される物理パスです。アップロードが失敗した場合、この値は存在しません。
size は添付ファイルのサイズです。アップロードが失敗した場合、この値は存在しません
フラグはステータス インジケーターです。1 は成功を意味します。-1 はファイル タイプが許可されていないことを意味します。-2 はファイル サイズが超過していることを意味します
-------------------------------------------------- ---------------*/
関数実行() {
$ files = array();
$field = $this->field;
$keys = array_keys($_FILES[$field]['name']);
foreach ($keys を $key) {
if (!$_FILES[$field]['name'][$key]) 続行;
$fileext = $this->fileext($_FILES[$field]['name'][$key]); // ファイル拡張子を取得します_
$ filename = date( 'ymdhis'、$ this-&gt; time).mt_rand(10,99)。 '。'。$ fileext;
$filedir = $this->dir; //添付ファイルが保存される実際のディレクトリ
$filesize = $_FILES[$field]['size'][$key] //ファイルサイズ
;
// 許可されないファイルタイプ if (!in_array($fileext,$this->allow_types)) {
$files[$key]['name'] = $_FILES[$field]['name'][$key];
$files[$key]['flag'] = -1;
続く;
}
//文件大小超出
if ($filesize > $this->maxsize) {
$files[$key]['name'] = $_FILES[$field]['name'][$key];
$files[$key]['name'] = $filesize;
$files[$key]['flag'] = -2;
続く;
}
$files[$key]['name'] = $ファイル名;
$files[$key]['dir'] = $filedir;
$files[$key]['size'] = $filesize;
//保存上传文件并删除临時文件
if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {
move_uploaded_file($_FILES[$field]['tmp_name'][$key],$filedir.$filename);
@unlink($_FILES[$field]['tmp_name'][$key]);
$files[$key]['flag'] = 1;
//对图片加水印和生成缩略图
if (in_array($fileext,array('jpg','png'))) {
if ($this->thumb_width) {
if ($this->create_thumb($filedir.$filename,$filedir.'thumb_'.$filename)) {
$files[$key]['thumb'] = 'thumb_'.$ファイル名; //缩略图文件名
}
を通して
$files を返す;
//サムネイルを作成し、同じ拡張子を持つサムネイルを生成します
//$src_file: ソース画像のパス、$thumb_file: サムネイルのパス
関数 create_thumb ($src_file,$thumb_file) {
$t_height = $this->thumb_height;
if (!file_exists($src_file)) が false を返す;
$src_info = getImageSize($src_file);
// ソース画像がサムネイル以下の場合、ソース画像をサムネイルとしてコピーします
If ($src_info[0]
If (!copy($src_file,$thumb_file)) {
false を返す;
trueを返します。
//サムネイルのサイズを比例的に計算します
If ($src_info[0] - $t_width > $src_info[1] - $t_height) {
$t_height = ($t_width / $src_info[0]) * $src_info[1];
$t_width = ($t_height / $src_info[1]) * $src_info[0];
ファイル拡張機能を使用して外に出ます。
$fileext = $this->fileext($src_file);
スイッチ ($fileext) {
ケース「jpg」:
$src_img = ImageCreateFromJPEG($src_file); Break;'png' の場合:
$src_img = ImageCreateFromPNG($src_file); Break;
ケース「gif」:
$src_img = ImageCreateFromGIF($src_file); Break;
//トゥルーカラーのサムネイル画像を作成します
$thumb_img = @ImageCreateTrueColor($t_width,$t_height);
If (function_exists('imagecopyresampled')) {
@ImageCopyResampled($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
@ImageCopyResize($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
// サムネイルを生成
スイッチ ($fileext) {
ケース「jpg」:
ImageJPEG($thumb_img,$thumb_file);
ケース 'gif' :
ImageGIF($thumb_img,$thumb_file);
'png' の場合:
ImagePNG($thumb_img,$thumb_file);
//一時的なイメージを破棄します
@ImageDestroy($src_img);
@ImageDestroy($thumb_img);
true を返します。
//画像に透かしを追加します
//$file: 透かしを入れるファイル
関数 create_watermark ($file) {
//ファイルが存在しない場合はリターン
If (!file_exists($this->watermark_file) || !file_exists($file)) が返される。 if (!function_exists('getImageSize')) が戻る;
//检查GD サポート対象文件型
$gd_allow_types = array();
if (function_exists('ImageCreateFromGIF')) $gd_allow_types['image/gif'] = 'ImageCreateFromGIF';
if (function_exists('ImageCreateFromPNG')) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';
if (function_exists('ImageCreateFromJPEG')) $gd_allow_types['image/jpeg'] = 'ImageCreateFromJPEG';
//获取文件情報
$fileinfo = getImageSize($file);
$wminfo = getImageSize($this->watermark_file);
if ($fileinfo[0] < $wminfo[0] || $fileinfo[1] < $wminfo[1]) return;
if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {
if (array_key_exists($wminfo['mime'],$gd_allow_types)) {
//文件创建画像
$temp = $gd_allow_types[$fileinfo['mime']]($file);
$temp_wm = $gd_allow_types[$wminfo['mime']]($this->watermark_file);
//水印の位置
スイッチ ($this->watermark_pos) {
ケース 1 : //顶部居左
$dst_x = 0; $dst_y = 0;壊す;
ケース 2 : //顶部居中
$dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = 0;壊す;
case 3 : //顶部居右
$dst_x = $fileinfo[0]; $dst_y = 0;壊す;
case 4 : //底部居左
$dst_x = 0; $dst_y = $fileinfo[1];壊す;
case 5 : //底部居中
$dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = $fileinfo[1];壊す;
case 6 : //底部居右
$dst_x = $fileinfo[0]-$wminfo[0]; $dst_y = $fileinfo[1]-$wminfo[1];壊す;
デフォルト : //随机
$dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); $dst_y = mt_rand(0,$fileinfo[1]-$wminfo[1]);
}
if (function_exists('ImageAlphaBlending')) ImageAlphaBlending($temp_wm,True); //画像の混色モードを設定します
if (function_exists('ImageSaveAlpha')) ImageSaveAlpha($temp_wm,True); //保存完全な alpha 通路情報
//画像用追加水印
if (function_exists('imageCopyMerge')) {
ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1],$this->watermark_trans);
} else {
ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1]);
}
//保存画像
スイッチ ($fileinfo['mime']) {
ケース「画像/jpeg」:
@imageJPEG($temp,$file);
壊す;
ケース「画像/png」:
@imagePNG($temp,$file);
壊す;
ケース「画像/gif」:
@imageGIF($temp,$file);
壊す;
//ゼロタイムイメージを破棄します
@imageDestroy($temp);
@imageDestroy($temp_wm);
// ファイル拡張子を取得します
関数 fileext($filename) {
return strto lower(substr(strrchr($filename,'.'),1,10));
}
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/929090.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/929090.html
技術記事
PHP でサムネイルを生成できるファイル アップロード クラスの例 この記事では、PHP でサムネイルを生成できるファイル アップロード クラスの例とその使用方法について説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです...