台灣最大防水抓漏接案平台
輕鬆接案網
清潔24H全省服務.合約保障
提供您平價又專業的搬家服務

首頁  •  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-20

    <?php
    //
    // resize.php
    //
    function resize($image)
    {
    if (&#33;($size = @getimagesize($image)))
    {
    die("不是圖檔");
    }

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

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

    return $size;
    }

    $image = "./test.gif";

    $new_size = resize($image);
    printf (&#39;<img src="%s" width="%d" hight="%d">&#39;, $image, $new_size$&#39;0&#39;], $new_size$&#39;1&#39;]);
    ?>


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

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

    include &#39;./class_album.php&#39;;
    $album = new album;

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

    #?#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(&#39;./album/&#39;);
    $album->savephoto( $_FILES[&#39;file&#39;][&#39;tmp_name&#39;] , $_FILES[&#39;file&#39;][&#39;type&#39;] );


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

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

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

    if( &#33;file_exists($this->al_dir) )
    mkdir($this->al_dir);
    if( &#33;file_exists($this->als_dir) )
    mkdir($this->als_dir);
    }


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

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

    case &#39;image/gif&#39;:
    $name .= &#39;.gif&#39;;
    break;

    case &#39;image/png&#39;:
    $name .= &#39;.png&#39;;
    break;

    default:
    echo &#39;不正確的檔案格式:&#39;.$file_type;
    echo &#39;<br/>允許的檔案格式: jpeg , gif ,png&#39;;
    exit();
    return 0;
    break;
    }
    return $name;

    }

    function savephoto( $file_tmpname, $file_type ){
    #確認檔案上傳
    if( &#33;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 &#39;新檔名:&#39;.$new_name.&#39;<br/>&#39;;

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

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

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

    case &#39;image/png&#39;:
    $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[&#39;h&#39;] OR $src_w>$this->limit[&#39;w&#39;]){
    if($src_h > $src_w)
    $rate = $src_h / $this->limit[&#39;h&#39;];
    else
    $rate = $src_w / $this->limit[&#39;w&#39;];

    $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 &#39;image/pjpeg&#39;:
    ImageJPEG($im2,$this->als_dir.$new_name, $this->q );
    break;
    case &#39;image/gif&#39;:
    ImageGIF($im2,$this->als_dir.$new_name);
    break;
    case &#39;image/png&#39;:
    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

    <?php
    /*
    主架構由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("<B>抱歉!您所指定的檔案並非為 JPG、GIF、PNG 請重新指定!!</BR><a href=\"javascript:history.back()\">回上一頁</a>");
    } else if (file_exists($file_dira . $_FILES['files']['name'])) { //判斷原圖是否有相同檔名
    exit("<B>檔案".$file_name."已存在,請勿重複上傳!!</BR><a href=\"javascript:history.back()\">回上一頁</a>");
    } else if (file_exists($file_dirb . $_FILES['files']['name'])) { //判斷縮圖是否有相同檔名
    exit("<B>檔案".$file_name."已存在,請勿重複上傳!!</BR><a href=\"javascript:history.back()\">回上一頁</a>");
    } else if ($_FILES['files']['size'] > $maxsize) { //判斷上傳的檔案大小是否超過最大上傳值
    exit("<B>".$_FILES['files']['name']." 的檔案大小 ".$sizea." KB 超過 ".$sizeb." KB!!</BR><a href=\"javascript:history.back()\">回上一頁</a>");
    } 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 "<B>檔案名稱:</B>".$_FILES['files']['name']."<BR>";
    //判斷檔案大小小於1k以位元組顯示
    if($_FILES['files']['size'] <= "1023") {
    echo "<B>檔案大小:</B>".$_FILES['files']['size']." 位元組<BR>";
    } else {
    echo "<B>檔案大小:</B>".$sizea." KB<BR>";
    }
    echo "<B>檔案類型:</B>".$_FILES['files']['type']."<BR>";
    echo "<B>上傳成功!!</B> <a href=\"javascript:history.back()\">回上一頁</a><BR><BR>";
    echo "縮小後 ";
    echo "<b>".$http_urlb."".$_FILES['files']['name']."</b><BR>"; //顯示縮圖連結
    echo "<img src=".$file_dirb."".$_FILES['files']['name']."><br><BR>"; //貼出縮圖
    echo "原始圖 ";
    echo "<b>".$http_urla."".$_FILES['files']['name']."</b><BR>"; //顯示原圖連結
    echo "<img src=".$file_dira."".$_FILES['files']['name'].">"; //貼出原圖
    imagedestroy($source); //結束圖形
    imagedestroy($target); //結束圖形
    exit;
    } else {
    imagedestroy($target);
    exit("<B>無法上傳 ".$_FILES['files']['name']."!!</BR>");
    }
    }
    } else {
    ?>
    <HTML>
    <HEAD>
    <TITLE>檔案上傳</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">
    </HEAD>
    <BODY>

    <P ALIGN="center">
    歡迎使用檔案上傳服務,您只可以上傳一個檔案。<BR>
    上傳檔案類型限制:JPG、GIF、PNG<BR>
    上傳檔案大小限制:<?echo "$sizeb";?> KB <BR><BR>
    所有檔案大小都以位元組換算(四捨五入)取整數顯示<br>
    檔案大小不超過1024位元組都以位元組顯示<br>
    <B>新增自動縮圖並顯示於瀏覽器上</B><BR>
    如有測試出問題請告知<br>
    另外,測試時請<b>不要攻擊</b>可愛滴主機<br>
    by 司徒<BR>
    目前功能進度........<b>2%</b>
    </P>
    <P ALIGN="center">
    <FORM METHOD="post" ACTION="upload.php" ENCTYPE="multipart/form-data">
    <input type="hidden" name="xx" value="1">
    <INPUT TYPE="file" NAME="files" SIZE="50"><BR><BR>
    <INPUT TYPE="submit" VALUE="上傳">
    <INPUT TYPE="reset" VALUE="重新設定">
    </FORM>
    </P>
    </BODY>
    </HTML>
    <?php
    }
    ?>

    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<br/>";
    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);
    }

    ?>
    <form name="FormName" action="" method="post">
    請輸入圖片的本地路徑或URL:<br/>
    <input name="ImageName" type="text" value="<?=$_POST["ImageName"]?>" size=32><br/>
    銳化度數(例:0.6、3.0):<br/>
    <input name="Degree" type="text" value="<?=$_POST["Degree"]?>"><br/>
    <input type="submit" value="提交">
    </form>




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

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