rakutoネット
お問合せ 免責事項 Q&A 掲示板 サイト管理 リンク サイトマップ
HOME > 画像アップロード

画像アップロード


画像のリサイズ付アップロード

アップロード処理の時にリサイズを行う場面が結構あったのでココで紹介してみます。


アップロード処理サンプル


GDのバージョンによって以下を変更ください。


ImageCreateTrueColor()
ImageCreate()

ImageCopyResampled()
ImageCopyResized()

アップロード画像のリサイズクラス

<?
/**
 * アップロード画像のリサイズ
 *
 * @author 高橋 裕志郎 <yujiro@rakuto.net>
 * @package RKT_upimage
 * @access public
 * @version 1.1
 */
class RKT_upimage
{
    /**
     * ファイルの種類
     * @var string
     */
    var $mime_type;
    /**
     * 一時保存ファイル名
     * @var string
     */
    var $tmp_name;
    /**
     * ファイルサイズ
     * @var integer
     */
    var $file_size;
    /**
     * fileタイプのinputフォーム名
     * @var string
     */
    var $upload_name;
 
    /**
     * コンストラクタ
     *
     * @access public
     * @param string $upload_name   fileタイプのinputフォーム名
     * @param integer $max_size     ファイルの最大サイズ
     */
    function RKT_upimage($upload_name="userFile")
    {        
        $this->tmp_name = "";
        $this->file_size = 0;
 
        $this->upload_name = $upload_name;
    }
 
    /**
     * アップロードされた情報をメンバ変数へセットする
     *
     * @access public
     * @return boolean 成功時真
     */
    function setUploadInfo()
    {
        if (!isSet($_FILES[$this->upload_name])) {
            return false;
        }
 
        $this->mime_type = $_FILES[$this->upload_name]['type'];
        $this->tmp_name  = $_FILES[$this->upload_name]['tmp_name'];
        $this->file_size = $_FILES[$this->upload_name]['size'];
        
        /* ファイルの種類が画像か判定 */
        if (!preg_match("/image/i", $this->mime_type)){
            return false;
        }
 
        return true;
    }
        
    /**
     * アップされた画像ファイルをコピーする
     *
     * @access public
     * @param string $filename コピーファイル名
     * @param integer $mod ファイルモード
     * @return boolean 成功時真
     */
    function saveUpfile($filename,$mod=0755)
    {
        if ($this->tmp_name == "none" || $this->tmp_name == ""){
            return false;
        }
 
        if (!copy($this->tmp_name, $filename)){
            if (!unlink($filename)){
                echo "ERROR : empty [".$filename."]<br>";
            }
            return false;
        } // if (!copy($this->tmp_name, $filename))
 
        chmod($filename, $mod);
 
        $org_size= getImageSize($filename);
 
        return array('width'=>$org_size[0],'height'=>$org_size[1]);
    }
 
    /**
     * 対象画像ファイルのリサイズ値を取得
     *
     * @access public
     * @param string $filename 対象ファイル名
     * @param integer $width 幅の最大値
     * @param integer $height 高さの最大値
     * @return array リサイズした幅と高さ
     */
    function getResize($filename,$width,$height)
    {
        $org_size = getImageSize($filename);
 
        $w_scale = $width/$org_size[0];
        $h_scale = $height/$org_size[1];
 
        /* 倍率の決定 */
        $scale = ($w_scale < $h_scale)?$w_scale:$h_scale;
    
        /* 縮小のみは以下を実行 */
        $scale = ($scale >= 1.0)?1:$scale;
 
        return array(
            intval($org_size[0] * $scale),
            intval($org_size[1] * $scale),
            $org_size[0],
            $org_size[1]
        );
    }
 
    /**
     * アップされた画像ファイルをリサイズする
     *
     * @access public
     * @param string $filename リサイズファイル名
     * @param integer $width リサイズ後の幅
     * @param integer $height リサイズ後の高さ
     * @param integer $mod ファイルモード
     * @return boolean 成功時真
     */
    function saveResize($filename,$width,$height,$mod=0755)
    {
        if (preg_match("/jpeg/i", $this->mime_type)){
            $function_image_create = 'ImageCreateFromJpeg';
            $function_image_new = 'ImageJpeg';
        } elseif (preg_match("/png/i", $this->mime_type)) {
            $function_image_create = 'ImageCreateFromGif';
            $function_image_new = 'ImagePNG';
        } elseif (preg_match("/gif/i", $this->mime_type)) {
            $function_image_create = 'ImageCreateFromGif';
            $function_image_new = 'ImageGif';
        }
 
        list($rsz_width,$rsz_height,$org_width,$org_height) 
            = $this->getResize($this->tmp_name,$width,$height);
        
        $rcs_resize = ImageCreateTrueColor($rsz_width,$rsz_height);
        $rcs_origin = @$function_image_create($this->tmp_name);
 
        ImageCopyResampled($rcs_resize, $rcs_origin,
                        0, 0, 0, 0, 
                        $rsz_width,$rsz_height, $org_width,$org_height);
        @$function_image_new($rcs_resize, $filename);
 
        ImageDestroy($rcs_origin);
        ImageDestroy($rcs_resize);
 
        return array('width'=>$rsz_width,'height'=>$rsz_height);
    }
} // RKT_upimage
?>

実行ファイル

<?php
include_once 'rkt_upimage.php';
 
/* 一覧用画像 */
$objres = new RKT_upimage('image');
if ($objres->setUploadInfo()){
    $objres->saveUpfile('test.gif');
    $objres->saveResize('tests.gif',80,80);
    echo "保存";
}
 
 
?>
<html lang="ja">
    <head>
        <title>リサイズ</title>
        <meta http-equiv="Content-Type" content="text/html;
         charset=EUC-JP">
    </head>
    <body>
        <form name="insert" enctype="multipart/form-data" 
        method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"
        style="margin:0px;">
            <input type="file" name="image" size="30"><br>
            <input type="submit">
        </form>
    </body>
</html>


<<PEAR DB
PHP Tips プログレスバー>>

PHPリング

@PHP.ring Home
<5 <1 Random List 1> 5>

rktSQLite

  • sourceforge.jp

広告


アマゾン検索

サーチ:
Amazon.co.jpアソシエイト

カテゴリ

  •  Templateエンジンのすすめ Templateエンジンのすすめ
  •  SQLiteをやってみよう SQLiteをやってみよう
  •  SQLite SQLコマンド一覧 SQLiteコマンド一覧
  •  SQLite 管理プログラムSQLite 管理
  •  はじめてのEclipse はじめてのEclipse
  •  PHP SQLiteのTIPS PHP SQLiteのTIPS
  •  サンプル サンプル/ダウンロード
  •  リンク リンク
  •  掲示板 掲示板

メニュー

  •  incoude pathを通す
  •  カレンダー
  •  排他処理
  •  PEAR DB
  •  画像アップロード
  •  プログレスバー
  •  PATH_INFOで拡張子を隠す
  •  トラックバック
  •  PEARのトラックバック
  •  iMagickでGIFアニメ
  •  メモリ上の画像をImageMagickする
  •  暗号化と復号化
  •  strtotime()でmonth処理

キーワード検索

キーワード



最近のTB

  •  2006/03/13さくらのブログに挑戦[rakutoネットブログ]
  •  2006/01/20レーザーチャートの作成方法[脳内研究所]

Summary

  •     ATOM(XML)
  •     RDF(XML)
  •     RSS0.92(XML)
  •     RSS2.0(XML)

Powered by

  •     PHP
  •     Smarty
  •     SQLite
  •     MySQL
Copyright (C) 2005 `rakuto.net' All Rights Reserved.