房屋裝潢設計新選擇!多年經驗
細膩打造,,價格合理
殺價網搬家優質選!專業服務品質,細心保護物品
精緻包裝服務,提供南北長途搬家

首頁  •  j2h 論壇 • 程式設計討論     • 

GD縮圖另存新檔

房東:妹子
發表時間:2007-01-19


Header("Content-type: image/JPEG");
$src_img = ImageCreateFromJPEG("pic.jpg");
$new_W = ImageSX($src_img) * .2;
$new_H = ImageSY($src_img) * .2;
$dst_img = ImageCreate($new_W, $new_H);
ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
ImageJPEG($dst_img);
ImageDestroy($dst_img);
ImageDestroy($src_img);
?>

提高縮圖畫質
Header("Content-type: image/JPEG");
$src_img = ImageCreateFromJPEG("pic.jpg");
$new_W = ImageSX($src_img) * .2;
$new_H = ImageSY($src_img) * .2;
$dst_img = imagecreatetruecolor($new_W, $new_H);
ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
ImageJPEG($dst_img);
ImageDestroy($dst_img);
ImageDestroy($src_img);
?>
http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=912



  • 贊助網站       

    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務
    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!

  • 1 樓住戶:妹子
    發表時間:2007-01-19

    http://linux.tnc.edu.tw/techdoc/banic/image/imagestring.html
    http://www.rd.idv.tw/article.asp?id=192 (說明非常清楚)
    http://dob.tnc.edu.tw/themes/old/showPage.php?s=2820&t=1 (程式碼完整)
    http://w2.sy3es.tnc.edu.tw/blogs/index.php?blog=1&m=20051207 (與上面來源同)
    可以用這個函數在圖片上 加上 網站上的 宣稱 和網址

    2 樓住戶:義工
    發表時間:2007-01-19

    //
    // resize.php
    //
    function resize($image)
    {
    if (!($size = @getimagesize($image)))
    {
    die("不是圖檔");
    }

    $limit = array('300', '200'); // 可修改預設的 width 300, hight 200

    if ($size$'0'] > $limit$'0'] || $size$'1'] > $limit$'1'])
    {
    $max = ($size$'0'] > $size$'1']) ? 0 : 1; //width, hight 那個大
    $ratio = $size$$max] / $limit$$max];
    $new_width = round($size$'0'] / $ratio);
    $new_hight = round($size$'1'] / $ratio);
    $size = array($new_width, $new_hight);
    }

    return $size;
    }

    $image = "./test.gif";

    $new_size = resize($image);
    printf ('', $image, $new_size$'0'], $new_size$'1']);
    ?>


    3 樓住戶:義工
    發表時間:2007-01-19

    ##################################
    ####用法
    ##################################

    include './class_album.php';
    $album = new album;

    #?#93;定存檔的目錄 , 縮圖的目錄則是目錄底下的thumbs
    $album->setdir('./album/');

    #?#93;定縮圖大小限制 , 寬跟高
    $album->setlimit(90,90);

    #?#93;定JPEG品質 , 預?#93;是80
    $album->setquality(95);

    #存檔並且產生縮圖 傳回建立的檔案名稱
    $filename = $album->savephoto( $_FILES的表單名稱,預?#93;值是filename );

    #刪除檔案 , 傳回1代表刪除成功 , 0則是錯誤
    $album->delphoto( 檔案名稱 );

    ##############################################
    ## CLASS程式碼
    ##############################################


    目前有三種 gif , jpg , png
    savephoto( 檔案TMP的名稱 , 檔案的類型);

    ex:

    $album = new album;
    $album->setdir('./album/');
    $album->savephoto( $_FILES['file']['tmp_name'] , $_FILES['file']['type'] );


    QUOTE:
    class album{
    #default size
    var $limit = array('w'=>80,'h'=>80);
    var $q=80;

    function setlimit($pixelw,$pixelh){ $this->limit = array('w'=>$pixelw,'h'=>$pixelh); }
    function setquality($num){ $this->q = $num;}

    #圖片的目錄
    function setdir($dir){
    $this->al_dir = $dir;
    $this->als_dir = $this->al_dir . 'thumbs/';

    if( !file_exists($this->al_dir) )
    mkdir($this->al_dir);
    if( !file_exists($this->als_dir) )
    mkdir($this->als_dir);
    }


    function mk_rname($file_type){
    #產生檔案名稱
    $name = uniqid("");

    switch( $file_type )
    {
    case 'image/pjpeg':
    $name .= '.jpg';
    break;

    case 'image/gif':
    $name .= '.gif';
    break;

    case 'image/png':
    $name .= '.png';
    break;

    default:
    echo '不正確的檔案格式:'.$file_type;
    echo '
    允許的檔案格式: jpeg , gif ,png';
    exit();
    return 0;
    break;
    }
    return $name;

    }

    function savephoto( $file_tmpname, $file_type ){
    #確認檔案上傳
    if( !is_uploaded_file( $file_tmpname ) )
    return false;

    ###建立檔案
    ###############################
    #設定檔名
    $new_name = $this->mk_rname( $file_type );
    #重抓檔名
    while( file_exists($this->al_dir.$new_name) ){ $new_name=$this->mk_rname( $file_type ); }
    echo '新檔名:'.$new_name.'
    ';

    if( !copy( $file_tmpname , $this->al_dir.$new_name) )
    return false;

    ###建立縮圖
    ###############################
    #從檔案建立畫布
    switch( $file_type ){
    case 'image/pjpeg':
    $im = ImageCreateFromJPEG ( $file_tmpname ) or Die("不是正確的JPG檔");
    break;

    case 'image/gif':
    $im = ImageCreateFromGif ( $file_tmpname ) or Die("不是正確的gif檔");
    break;

    case 'image/png':
    $im = ImageCreateFromPng ( $file_tmpname ) or Die("不是正確的png檔");
    break;

    default:
    return 0;
    break;
    }
    $src_h = ImageSY($im );
    $src_w = ImageSX($im );
    $dst_h = $src_h;
    $dst_w = $src_w;

    #定義縮小值
    if($src_h>$this->limit['h'] OR $src_w>$this->limit['w']){
    if($src_h > $src_w)
    $rate = $src_h / $this->limit['h'];
    else
    $rate = $src_w / $this->limit['w'];

    $dst_h = $src_h / $rate;
    $dst_w = $src_w / $rate;
    }
    #建立新畫布
    $im2= ImageCreateTrueColor( $dst_w, $dst_h);
    imagecopyresized ($im2, $im, 0,0, 0,0, $dst_w, $dst_h , $src_w, $src_h);
    switch( $file_type ){
    case 'image/pjpeg':
    ImageJPEG($im2,$this->als_dir.$new_name, $this->q );
    break;
    case 'image/gif':
    ImageGIF($im2,$this->als_dir.$new_name);
    break;
    case 'image/png':
    ImagePNG($im2,$this->als_dir.$new_name);
    break;
    default:
    return false;
    break;

    }

    #刪除暫存檔
    unlink( $file_tmpname );
    #傳回檔案名稱
    return $new_name;

    }

    function delphoto($filename){
    if(unlink( $this->al_dir.$filename) AND unlink($this->als_dir.$filename))
    return true;
    else
    return false;
    }

    #Class End
    }



    4 樓住戶:軍師
    發表時間:2007-03-24

    /*
    主架構由bbc分享
    1024位元組 = 1KB
    1024位元組 * 1024 = 1048576位元組 = 1MB
    1048576位元組 * 1024 = 1073741824位元組 = 1GB
    */

    $file_dira="./img/big/"; //原圖存檔路徑
    $file_dirb="./img/small/"; //縮圖存檔路徑
    $http_urla = "http://iori33.no-ip.com/sky/img/big/"; //原圖網址
    $http_urlb = "http://iori33.no-ip.com/sky/img/small/"; //縮圖網址
    $maxsize="524288"; //MAX上傳位元組
    $sizea=round($_FILES['files']['size']/1024); //換算上傳的檔案大小為KB(四捨五入)
    $sizeb=round($maxsize/1024); //換算最大上傳值為KB(四捨五入)
    $small_w = "100"; //縮圖寬度
    $small_h = "80"; //縮圖高度
    $img_fu = "[jpg|JPG|gif|GIF|png|PNG]"; //可上傳的副檔名以[]包起來用|格開(大小寫都要加入)


    if ($_POST['xx']) {
    $fname = substr ($_FILES['files']['name'], -3); //傳回一部份字串如果 start是負數傳回的字串將從結尾開始
    if (!ereg($img_fu,$fname)) { //判斷上傳的檔案副檔名是否為jpg,gif,png
    exit("抱歉!您所指定的檔案並非為 JPG、GIF、PNG 請重新指定!!
    回上一頁");
    } else if (file_exists($file_dira . $_FILES['files']['name'])) { //判斷原圖是否有相同檔名
    exit("檔案".$file_name."已存在,請勿重複上傳!!
    回上一頁");
    } else if (file_exists($file_dirb . $_FILES['files']['name'])) { //判斷縮圖是否有相同檔名
    exit("檔案".$file_name."已存在,請勿重複上傳!!
    回上一頁");
    } else if ($_FILES['files']['size'] > $maxsize) { //判斷上傳的檔案大小是否超過最大上傳值
    exit("".$_FILES['files']['name']." 的檔案大小 ".$sizea." KB 超過 ".$sizeb." KB!!
    回上一頁");
    } else {
    if ($_FILES['files']['type'] == "image/pjpeg") { //依不同檔案類型用不同的函式建立一個新的圖形
    $source = imagecreatefromjpeg($files);
    }
    if ($_FILES['files']['type'] == "image/gif") {
    $source = imagecreatefromgif($files);
    }
    if ($_FILES['files']['type'] == "image/x-png") {
    $source = imagecreatefrompng($files);
    }
    $target = imagecreatetruecolor($small_w,$small_h) ; //預縮圖的寬高
    imagecopyresampled($target,$source,0,0,0,0,$small_w,$small_h,ImageSX($source),ImageSY($source)); //複製影像並重新調整影像大小
    if (ereg("image|^(jpg)$", $_FILES['files']['type'])) { //依檔案類型用不同函式存檔
    imagejpeg($target,$file_dirb.$_FILES['files']['name']);
    } else if (ereg("image|^(gif)$", $_FILES['files']['type'])) {
    imagegif($target,$file_dirb.$_FILES['files']['name']);
    } else if (ereg("image|^(png)$", $_FILES['files']['type'])) {
    imagepng($target,$file_dirb.$_FILES['files']['name']);
    }
    if (move_uploaded_file($_FILES['files']['tmp_name'],$file_dira.$_FILES['files']['name'])) {
    echo "檔案名稱:".$_FILES['files']['name']."
    ";
    //判斷檔案大小小於1k以位元組顯示
    if($_FILES['files']['size'] <= "1023") {
    echo "檔案大小:".$_FILES['files']['size']." 位元組
    ";
    } else {
    echo "檔案大小:".$sizea." KB
    ";
    }
    echo "檔案類型:".$_FILES['files']['type']."
    ";
    echo "上傳成功!! 回上一頁

    ";
    echo "縮小後 ";
    echo "".$http_urlb."".$_FILES['files']['name']."
    "; //顯示縮圖連結
    echo "

    "; //貼出縮圖
    echo "原始圖 ";
    echo "".$http_urla."".$_FILES['files']['name']."
    "; //顯示原圖連結
    echo ""; //貼出原圖
    imagedestroy($source); //結束圖形
    imagedestroy($target); //結束圖形
    exit;
    } else {
    imagedestroy($target);
    exit("無法上傳 ".$_FILES['files']['name']."!!
    ");
    }
    }
    } else {
    ?>


    檔案上傳





    歡迎使用檔案上傳服務,您只可以上傳一個檔案。

    上傳檔案類型限制:JPG、GIF、PNG

    上傳檔案大小限制: KB


    所有檔案大小都以位元組換算(四捨五入)取整數顯示

    檔案大小不超過1024位元組都以位元組顯示

    新增自動縮圖並顯示於瀏覽器上

    如有測試出問題請告知

    另外,測試時請不要攻擊可愛滴主機

    by 司徒

    目前功能進度........2%














    }
    ?>

    5 樓住戶:軍師
    發表時間:2007-03-25

    //讀取圖像的類型
    //1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF
    function GetImageType($filename) {return (($imginfo=@getimagesize($filename))!=null ? $imginfo[2] : null);}

    //圖像銳化
    //$scr_im:圖像資源控制碼,$degree:銳化度數
    function Sharp(&$src_im, &$dst_im, $degree)
    {
    $src_x = imagesx($src_im);
    $src_y = imagesy($src_im);
    //$dst_im = imagecreate($src_x, $src_y);
    //imagecopy($dst_im, $src_im, 0, 0, 0, 0, $src_x, $src_y);
    $cnt = 0;
    for ($x=1; $x<$src_x; $x++)
    for ($y=1; $y<$src_y; $y++)
    {
    $src_clr1 = imagecolorsforindex($src_im, imagecolorat($src_im, $x-1, $y-1));
    $src_clr2 = imagecolorsforindex($src_im, imagecolorat($src_im, $x, $y));
    $r = intval($src_clr2["red"]+$degree*($src_clr2["red"]-$src_clr1["red"]));
    $g = intval($src_clr2["green"]+$degree*($src_clr2["green"]-$src_clr1["green"]));
    $b = intval($src_clr2["blue"]+$degree*($src_clr2["blue"]-$src_clr1["blue"]));
    $r = min(255, max($r, 0));
    $g = min(255, max($g, 0));
    $b = min(255, max($b, 0));
    //echo "r:$r, g:$g, b:$b
    ";
    if (($dst_clr=imagecolorexact($dst_im, $r, $g, $b))==-1)
    $dst_clr = Imagecolorallocate($dst_im, $r, $g, $b);
    $cnt++;
    if ($dst_clr==-1) die("color allocate faile at $x, $y ($cnt).");
    imagesetpixel($dst_im, $x, $y, $dst_clr);
    }
    return $dst_im;
    }

    $ImageFunctions = array("imagecreatefromwbmp", "imagecreatefromgif", "imagecreatefromjpeg", "imagecreatefrompng");

    if (!empty($_POST["ImageName"]))
    {
    set_time_limit(10*60);
    if (($ImageType=GetImageType($_POST["ImageName"]))==false)
    die("指定文件不存在或不是有效的圖片或不支援類型!");
    if ($ImageType==6) $ImageType = 0;
    if ($ImageType>3) die("不支援的圖片類型!");
    $im1 = $ImageFunctions[$ImageType]($_POST["ImageName"]);
    $im2 = $ImageFunctions[$ImageType]($_POST["ImageName"]);
    //print_r(imagecolorsforindex($im, imagecolorat($im, 10, 10)));
    Sharp($im1, $im2, $_POST["Degree"]);
    header("Content-type: image/png");
    imagepng($im2);
    imagedestroy($im1);
    imagedestroy($im2);
    }

    ?>

    請輸入圖片的本地路徑或URL:

    " size=32>

    銳化度數(例:0.6、3.0):

    ">







     共 5 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容:
    其他選項: