茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    php將圖片保存為不同尺寸圖片的圖片類實例
    來源:易賢網(wǎng) 閱讀:979 次 日期:2015-04-03 10:39:53
    溫馨提示:易賢網(wǎng)小編為您整理了“php將圖片保存為不同尺寸圖片的圖片類實例”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了php將圖片保存為不同尺寸圖片的圖片類,涉及php圖片操作的保存、復(fù)制、縮略圖等常用技巧,并封裝成一個類文件以便于調(diào)用,非常具有實用價值,需要的朋友可以參考下

    本文實例講述了php將圖片保存為不同規(guī)格的圖片類。分享給大家供大家參考。具體如下:

    圖片處理類.imagecls.php如下:

    /**

    圖片處理類

    */

    class imagecls

    {

    /**

    * 文件信息

    */

    var $file = array();

    /**

    * 保存目錄

    */

    var $dir = '';

    /**

    * 錯誤代碼

    */

    var $error_code = 0;

    /**

    * 文件上傳最大KB

    */

    var $max_size = -1;

    function es_imagecls()

    {

    }

    private function checkSize($size)

    {

    return !($size > $this->max_size) || (-1 == $this->max_size);

    }

    /**

    * 處理上傳文件

    * @param array $file 上傳的文件

    * @param string $dir 保存的目錄

    * @return bool

    */

    function init($file, $dir = 'temp')

    {

    if(!is_array($file) || empty($file) || !$this->isUploadFile($file['tmp_name']) || trim($file['name']) == '' || $file['size'] == 0)

    {

    $this->file = array();

    $this->error_code = -1;

    return false;

    }

    else

    {

    $file['size'] = intval($file['size']);

    $file['name'] = trim($file['name']);

    $file['thumb'] = '';

    $file['ext'] = $this->fileExt($file['name']);

    $file['name'] = htmlspecialchars($file['name'], ENT_QUOTES);

    $file['is_image'] = $this->isImageExt($file['ext']);

    $file['file_dir'] = $this->getTargetDir($dir);

    $file['prefix'] = md5(microtime(true)).rand(10,99);

    $file['target'] = "./public/".$file['file_dir'].'/'.$file['prefix'].'.jpg'; //相對

    $file['local_target'] = APP_ROOT_PATH."public/".$file['file_dir'].'/'.$file['prefix'].'.jpg'; //物理

    $this->file = &$file;

    $this->error_code = 0;

    return true;

    }

    }

    /**

    * 保存文件

    * @return bool

    */

    function save()

    {

    if(empty($this->file) || empty($this->file['tmp_name']))

    $this->error_code = -101;

    elseif(!$this->checkSize($this->file['size']))

    $this->error_code = -105;

    elseif(!$this->file['is_image'])

    $this->error_code = -102;

    elseif(!$this->saveFile($this->file['tmp_name'], $this->file['local_target']))

    $this->error_code = -103;

    elseif($this->file['is_image'] && (!$this->file['image_info'] = $this->getImageInfo($this->file['local_target'], true)))

    {

    $this->error_code = -104;

    @unlink($this->file['local_target']);

    }

    else

    {

    $this->error_code = 0;

    return true;

    }

    return false;

    }

    /**

    * 獲取錯誤代碼

    * @return number

    */

    function error()

    {

    return $this->error_code;

    }

    /**

    * 獲取文件擴展名

    * @return string

    */

    function fileExt($file_name)

    {

    return addslashes(strtolower(substr(strrchr($file_name, '.'), 1, 10)));

    }

    /**

    * 根據(jù)擴展名判斷文件是否為圖像

    * @param string $ext 擴展名

    * @return bool

    */

    function isImageExt($ext)

    {

    static $img_ext = array('jpg', 'jpeg', 'png', 'bmp','gif','giff');

    return in_array($ext, $img_ext) ? 1 : 0;

    }

    /**

    * 獲取圖像信息

    * @param string $target 文件路徑

    * @return mixed

    */

    function getImageInfo($target)

    {

    $ext = es_imagecls::fileExt($target);

    $is_image = es_imagecls::isImageExt($ext);

    if(!$is_image)

    return false;

    elseif(!is_readable($target))

    return false;

    elseif($image_info = @getimagesize($target))

    {

    list($width, $height, $type) = !empty($image_info) ? $image_info : array('', '', '');

    $size = $width * $height;

    if($is_image && !in_array($type, array(1,2,3,6,13)))

    return false;

    $image_info['type'] = strtolower(substr(image_type_to_extension($image_info[2]),1));

    return $image_info;

    }

    else

    return false;

    }

    /**

    * 獲取是否充許上傳文件

    * @param string $source 文件路徑

    * @return bool

    */

    function isUploadFile($source)

    {

    return $source && ($source != 'none') && (is_uploaded_file($source) || is_uploaded_file(str_replace('', '', $source)));

    }

    /**

    * 獲取保存的路徑

    * @param string $dir 指定的保存目錄

    * @return string

    */

    function getTargetDir($dir)

    {

    if (!is_dir(APP_ROOT_PATH."public/".$dir)) {

    @mkdir(APP_ROOT_PATH."public/".$dir);

    @chmod(APP_ROOT_PATH."public/".$dir, 0777);

    }

    return $dir;

    }

    /**

    * 保存文件

    * @param string $source 源文件路徑

    * @param string $target 目錄文件路徑

    * @return bool

    */

    private function saveFile($source, $target)

    {

    if(!es_imagecls::isUploadFile($source))

    $succeed = false;

    elseif(@copy($source, $target))

    $succeed = true;

    elseif(function_exists('move_uploaded_file') && @move_uploaded_file($source, $target))

    $succeed = true;

    elseif (@is_readable($source) && (@$fp_s = fopen($source, 'rb')) && (@$fp_t = fopen($target, 'wb')))

    {

    while (!feof($fp_s))

    {

    $s = @fread($fp_s, 1024 * 512);

    @fwrite($fp_t, $s);

    }

    fclose($fp_s);

    fclose($fp_t);

    $succeed = true;

    }

    if($succeed)

    {

    $this->error_code = 0;

    @chmod($target, 0644);

    @unlink($source);

    }

    else

    {

    $this->error_code = 0;

    }

    return $succeed;

    }

    public function thumb($image,$maxWidth=200,$maxHeight=50,$gen = 0,$interlace=true,$filepath = '',$is_preview = true)

    {

    $info = es_imagecls::getImageInfo($image);

    if($info !== false)

    {

    $srcWidth = $info[0];

    $srcHeight = $info[1];

    $type = $info['type'];

    $interlace = $interlace? 1:0;

    unset($info);

    if($maxWidth > 0 && $maxHeight > 0)

    $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 計算縮放比例

    elseif($maxWidth == 0)

    $scale = $maxHeight/$srcHeight;

    elseif($maxHeight == 0)

    $scale = $maxWidth/$srcWidth;

    $paths = pathinfo($image);

    $paths['filename'] = trim(strtolower($paths['basename']),".".strtolower($paths['extension']));

    $basefilename = explode("_",$paths['filename']);

    $basefilename = $basefilename[0];

    if(empty($filepath))

    {

    if($is_preview)

    $thumbname = $paths['dirname'].'/'.$basefilename.'_'.$maxWidth.'x'.$maxHeight.'.jpg';

    else

    $thumbname = $paths['dirname'].'/'.$basefilename.'o_'.$maxWidth.'x'.$maxHeight.'.jpg';

    }

    else

    $thumbname = $filepath;

    $thumburl = str_replace(APP_ROOT_PATH,'./',$thumbname);

    if($scale >= 1)

    {

    // 超過原圖大小不再縮略

    $width = $srcWidth;

    $height = $srcHeight;

    if(!$is_preview)

    {

    //非預(yù)覽模式寫入原圖

    file_put_contents($thumbname,file_get_contents($image)); //用原圖寫入

    return array('url'=>$thumburl,'path'=>$thumbname);

    }

    }

    else

    {

    // 縮略圖尺寸

    $width = (int)($srcWidth*$scale);

    $height = (int)($srcHeight*$scale);

    }

    if($gen == 1)

    {

    $width = $maxWidth;

    $height = $maxHeight;

    }

    // 載入原圖

    $createFun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);

    if(!function_exists($createFun))

    $createFun = 'imagecreatefromjpeg';

    $srcImg = $createFun($image);

    //創(chuàng)建縮略圖

    if($type!='gif' && function_exists('imagecreatetruecolor'))

    $thumbImg = imagecreatetruecolor($width, $height);

    else

    $thumbImg = imagecreate($width, $height);

    $x = 0;

    $y = 0;

    if($gen == 1 && $maxWidth > 0 && $maxHeight > 0)

    {

    $resize_ratio = $maxWidth/$maxHeight;

    $src_ratio = $srcWidth/$srcHeight;

    if($src_ratio >= $resize_ratio)

    {

    $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;

    $width = ($height * $srcWidth) / $srcHeight;

    }

    else

    {

    $y = ($srcHeight - ( (1 / $resize_ratio) * $srcWidth)) / 2;

    $height = ($width * $srcHeight) / $srcWidth;

    }

    }

    // 復(fù)制圖片

    if(function_exists("imagecopyresampled"))

    imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);

    else

    imagecopyresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);

    if('gif'==$type || 'png'==$type) {

    $background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一個綠色

    imagecolortransparent($thumbImg,$background_color); // 設(shè)置為透明色,若注釋掉該行則輸出綠色的圖

    }

    // 對jpeg圖形設(shè)置隔行掃描

    if('jpg'==$type || 'jpeg'==$type)

    imageinterlace($thumbImg,$interlace);

    // 生成圖片

    imagejpeg($thumbImg,$thumbname,100);

    imagedestroy($thumbImg);

    imagedestroy($srcImg);

    return array('url'=>$thumburl,'path'=>$thumbname);

    }

    return false;

    }

    public function make_thumb($srcImg,$srcWidth,$srcHeight,$type,$maxWidth=200,$maxHeight=50,$gen = 0)

    {

    $interlace = $interlace? 1:0;

    if($maxWidth > 0 && $maxHeight > 0)

    $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 計算縮放比例

    elseif($maxWidth == 0)

    $scale = $maxHeight/$srcHeight;

    elseif($maxHeight == 0)

    $scale = $maxWidth/$srcWidth;

    if($scale >= 1)

    {

    // 超過原圖大小不再縮略

    $width = $srcWidth;

    $height = $srcHeight;

    }

    else

    {

    // 縮略圖尺寸

    $width = (int)($srcWidth*$scale);

    $height = (int)($srcHeight*$scale);

    }

    if($gen == 1)

    {

    $width = $maxWidth;

    $height = $maxHeight;

    }

    //創(chuàng)建縮略圖

    if($type!='gif' && function_exists('imagecreatetruecolor'))

    $thumbImg = imagecreatetruecolor($width, $height);

    else

    $thumbImg = imagecreatetruecolor($width, $height);

    $x = 0;

    $y = 0;

    if($gen == 1 && $maxWidth > 0 && $maxHeight > 0)

    {

    $resize_ratio = $maxWidth/$maxHeight;

    $src_ratio = $srcWidth/$srcHeight;

    if($src_ratio >= $resize_ratio)

    {

    $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;

    $width = ($height * $srcWidth) / $srcHeight;

    }

    else

    {

    $y = ($srcHeight - ( (1 / $resize_ratio) * $srcWidth)) / 2;

    $height = ($width * $srcHeight) / $srcWidth;

    }

    }

    // 復(fù)制圖片

    if(function_exists("imagecopyresampled"))

    imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);

    else

    imagecopyresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);

    if('gif'==$type || 'png'==$type) {

    $background_color = imagecolorallocate($thumbImg, 255,255,255); // 指派一個綠色

    imagecolortransparent($thumbImg,$background_color); // 設(shè)置為透明色,若注釋掉該行則輸出綠色的圖

    }

    // 對jpeg圖形設(shè)置隔行掃描

    if('jpg'==$type || 'jpeg'==$type)

    imageinterlace($thumbImg,$interlace);

    return $thumbImg;

    }

    public function water($source,$water,$alpha=80,$position="0")

    {

    //檢查文件是否存在

    if(!file_exists($source)||!file_exists($water))

    return false;

    //圖片信息

    $sInfo = es_imagecls::getImageInfo($source);

    $wInfo = es_imagecls::getImageInfo($water);

    //如果圖片小于水印圖片,不生成圖片

    if($sInfo["0"] < $wInfo["0"] || $sInfo['1'] < $wInfo['1'])

    return false;

    if(is_animated_gif($source))

    {

    require_once APP_ROOT_PATH."system/utils/gif_encoder.php";

    require_once APP_ROOT_PATH."system/utils/gif_reader.php";

    $gif = new GIFReader();

    $gif->load($source);

    foreach($gif->IMGS['frames'] as $k=>$img)

    {

    $im = imagecreatefromstring($gif->getgif($k));

    //為im加水印

    $sImage=$im;

    $wCreateFun="imagecreatefrom".$wInfo['type'];

    if(!function_exists($wCreateFun))

    $wCreateFun = 'imagecreatefromjpeg';

    $wImage=$wCreateFun($water);

    //設(shè)定圖像的混色模式

    imagealphablending($wImage, true);

    switch (intval($position))

    {

    case 0: break;

    //左上

    case 1:

    $posY=0;

    $posX=0;

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //右上

    case 2:

    $posY=0;

    $posX=$sInfo[0]-$wInfo[0];

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //左下

    case 3:

    $posY=$sInfo[1]-$wInfo[1];

    $posX=0;

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //右下

    case 4:

    $posY=$sInfo[1]-$wInfo[1];

    $posX=$sInfo[0]-$wInfo[0];

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //居中

    case 5:

    $posY=$sInfo[1]/2-$wInfo[1]/2;

    $posX=$sInfo[0]/2-$wInfo[0]/2;

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    }

    //end im加水印

    ob_start();

    imagegif($sImage);

    $content = ob_get_contents();

    ob_end_clean();

    $frames [ ] = $content;

    $framed [ ] = $img['frameDelay'];

    }

    $gif_maker = new GIFEncoder (

    $frames,

    $framed,

    0,

    2,

    0, 0, 0,

    "bin" //bin為二進制 url為地址

    );

    $image_rs = $gif_maker->GetAnimation ( );

    //如果沒有給出保存文件名,默認為原圖像名

    @unlink($source);

    //保存圖像

    file_put_contents($source,$image_rs);

    return true;

    }

    //建立圖像

    $sCreateFun="imagecreatefrom".$sInfo['type'];

    if(!function_exists($sCreateFun))

    $sCreateFun = 'imagecreatefromjpeg';

    $sImage=$sCreateFun($source);

    $wCreateFun="imagecreatefrom".$wInfo['type'];

    if(!function_exists($wCreateFun))

    $wCreateFun = 'imagecreatefromjpeg';

    $wImage=$wCreateFun($water);

    //設(shè)定圖像的混色模式

    imagealphablending($wImage, true);

    switch (intval($position))

    {

    case 0: break;

    //左上

    case 1:

    $posY=0;

    $posX=0;

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //右上

    case 2:

    $posY=0;

    $posX=$sInfo[0]-$wInfo[0];

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //左下

    case 3:

    $posY=$sInfo[1]-$wInfo[1];

    $posX=0;

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //右下

    case 4:

    $posY=$sInfo[1]-$wInfo[1];

    $posX=$sInfo[0]-$wInfo[0];

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    //居中

    case 5:

    $posY=$sInfo[1]/2-$wInfo[1]/2;

    $posX=$sInfo[0]/2-$wInfo[0]/2;

    //生成混合圖像

    imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);

    break;

    }

    //如果沒有給出保存文件名,默認為原圖像名

    @unlink($source);

    //保存圖像

    imagejpeg($sImage,$source,100);

    imagedestroy($sImage);

    }

    }

    if(!function_exists('image_type_to_extension'))

    {

    function image_type_to_extension($imagetype)

    {

    if(empty($imagetype))

    return false;

    switch($imagetype)

    {

    case IMAGETYPE_GIF : return '.gif';

    case IMAGETYPE_JPEG : return '.jpeg';

    case IMAGETYPE_PNG : return '.png';

    case IMAGETYPE_SWF : return '.swf';

    case IMAGETYPE_PSD : return '.psd';

    case IMAGETYPE_BMP : return '.bmp';

    case IMAGETYPE_TIFF_II : return '.tiff';

    case IMAGETYPE_TIFF_MM : return '.tiff';

    case IMAGETYPE_JPC : return '.jpc';

    case IMAGETYPE_JP2 : return '.jp2';

    case IMAGETYPE_JPX : return '.jpf';

    case IMAGETYPE_JB2 : return '.jb2';

    case IMAGETYPE_SWC : return '.swc';

    case IMAGETYPE_IFF : return '.aiff';

    case IMAGETYPE_WBMP : return '.wbmp';

    case IMAGETYPE_XBM : return '.xbm';

    default : return false;

    }

    }

    }

    ?>

    2.get_spec_img()調(diào)用圖片類,然后再用下面的方法保存不同規(guī)格的圖片并返回圖片連接

    //獲取相應(yīng)規(guī)格的圖片地址

    //gen=0:保持比例縮放,不剪裁,如高為0,則保證寬度按比例縮放 gen=1:保證長寬,剪裁

    function get_spec_image($img_path,$width=0,$height=0,$gen=0,$is_preview=true)

    {

    if($width==0)

    $new_path = $img_path;

    else

    {

    $img_name = substr($img_path,0,-4);

    $img_ext = substr($img_path,-3);

    if($is_preview)

    $new_path = $img_name."_".$width."x".$height.".jpg";

    else

    $new_path = $img_name."o_".$width."x".$height.".jpg";

    if(!file_exists($new_path))

    {

    require_once "imagecls.php";

    $imagec = new imagecls();

    $thumb = $imagec->thumb($img_path,$width,$height,$gen,true,"",$is_preview);

    if(app_conf("PUBLIC_DOMAIN_ROOT")!='')

    {

    $paths = pathinfo($new_path);

    $path = str_replace("./","",$paths['dirname']);

    $filename = $paths['basename'];

    $pathwithoupublic = str_replace("public/","",$path);

    $file_data = @file_get_contents($path.$file);

    $img = @imagecreatefromstring($file_data);

    if($img!==false)

    {

    $save_path = "public/".$path;

    if(!is_dir($save_path))

    {

    @mk_dir($save_path);

    }

    @file_put_contents($save_path.$name,$file_data);

    }

    }

    }

    }

    return $new_path;

    }

    3.使用方法:

    //im:將店鋪圖片保存為3種規(guī)格:小圖:48x48,中圖120x120,大圖200x200

    $small_url=get_spec_image($data['image'],48,48,0);

    $<span id="result_box" class="short_text" lang="en"><span>middle_url</span></span>=get_spec_image($data['image'],120,120,0);

    $big_url=get_spec_image($data['image'],200,200,0);

    希望本文所述對大家的php程序設(shè)計有所幫助。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機網(wǎng)站地址:php將圖片保存為不同尺寸圖片的圖片類實例

    2026上岸·考公考編培訓報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)