茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675236 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_DPP_0038.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼]用php和imagemagick來處理圖片文件的上傳和縮放處理

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]用php和imagemagick來處理圖片文件的上傳和縮放處理
用php和imagemagick來處理圖片文件的上傳和縮放處理(錯誤和疑問請和 zy.wang@263.net 聯系)
php處理文件的上傳是很簡便的,但是如果要對上傳的圖片進行縮放處理的話,雖說能用GD來做,但是要進行比較繁瑣的處理。ImageMagick是一個圖像處理包,一般的Linux軟件包中都會有的。它包含了許多處理圖像的工具,它可以進行圖像文件格式的轉化還可以對圖像進行各種處理,其中我們將用到它的圖像縮放功能。這個通過它的軟件包中的工具convert來實現,這樣來調用
convert -geometry 寬x高 源文件 縮放的文件

請在當前目錄下建立一個images的目錄,並且能讓web執行用戶可寫,這個目錄用來存放上載的圖片和縮放的圖片。
底下是一個簡單小例子,包括圖片上傳和處理,在RedHat6.0+php3.0.12下測試通過。
uploadform.html:文件上傳表單
<HTML>
<HEAD>
<TITLE>選擇文件</TITLE>
</HEAD>
<BODY ALIGN="CENTER">
<FORM ENCTYPE="multipart/form-data" ACTION="upload.php3" METHOD=POST>
選擇圖片文件: <INPUT NAME="image" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
</BODY>
</HTML>

upload.php3:處理上傳的圖片文件
<html>
<head>
<title>處理</title>
</head>
<body>
<?
$flag = "true";
//判斷上載文件的格式等
if(isset($image) && $image && ($image_type = "image/gif" || $image_type = "image/png" || $image_type = "image/pjpeg")){
        $dest_image = "./images/".$image_name;
        if(@copy($image,$dest_image)){  //拷貝上載文件到images目錄下
           $small_image = "./images/small".$image_name;
           $exec_str = "/usr/bin/X11/convert -geometry 100x100 ".$dest_image." ".$small_image;
           @exec($exec_str);       //進行圖像的縮放
        }else
           $flag = "false";
}else{
        $flag = "false";
}
if( $flag == "false"){
        echo "error<p>";
        echo "<a href=\"uploadform.html\">重新上載</a>";
}else{
        echo "<image src=\"$small_image\">";
        echo "<image src=\"./images/$image_name\">";
}
?>
</body>
</html>

如果結合GetImageSize函數,我們還可以控制縮放的大小。結合數據庫可以對圖片文件進行索引或者存儲等。
ImageMagick的功能是很強大的,不僅能對圖片文件進行縮放,還有進行翻轉、格式轉化等等功能。
讀者可以自己參看ImageMagick的幫助文件。
原文出處:永遠的UNIX
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]利用imagemagick來作縮圖
此方式是經由站長建議來實作的喔..
那天與站長閒聊GD與系統縮圖程式的優缺點.
經小弟省思許多還是贊同站長的建議...
利用imagemagick與PHP來作搭配..
果然...方便渡給100分喔..
小弟提供一個簡單的語法範例功大家一起研究..
有錯誤請多指正唷..^_^
<?php
$w="240"; //自行設定的縮圖寬度
$h="320"; //自行設定的縮圖高度
if($_FILES['file']['type']=="image/pjpeg" || $_FILES['file']['type']=="image/gif" || $_FILES['file']['type']=="image/png") {
if($_FILES['file']['type']=="image/pjpeg") {
$filename=substr(rand(0,999999999999),1,7).".gif"; //隨機取檔名..我的習慣啦 ^^||
}
if($_FILES['file']['type']=="image/gif") {
$filename=substr(rand(0,999999999999),1,7).".gif";
}
if($_FILES['file']['type']=="image/png") {
$filename=substr(rand(0,999999999999),1,7).".png";
}
$size=$w."x".$h;
copy($_FILES['file']['tmp_name'],"/home/caisse/case/kf/data/file/b".$filename); //將暫存檔copy至自己定義的目錄..因為小弟大小圖都想要 ^^
$big_image="/home/caisse/case/kf/data/file/b".$filename;
$small_image="/home/caisse/case/kf/data/file/s".$filename;
$exec_str="/usr/bin/convert '-geometry' ".$size." ".$big_image." ".$small_image; //注意"跟'唷
exec($exec_str);
} else {
echo "請上傳圖片";
}
?>
<form action="#" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="file">
<input type="submit" name="Submit" value="送出">
</form>
<?php if($_FILES) { ?>
原始圖 <img src="/data/file/b<?php echo $filename; ?>"> <br>
裁切後的圖 <img src="/data/file/s<?php echo $filename; ?>">
<?php } ?>


感激站長的幫忙..小弟才能將此文章port來與大家研究唷 ^_^

其它的參數:
1.生成縮圖
a.指定大小
# convert -sample 80x40 input.jpg output.jpg

b.利用比例
# convert -sample 25%x25% input.jpg output.jpg

2.旋轉圖形
利用cotate參數,+90表順時針旋轉90度,而-90則表逆時針轉90度
# convert -rotate 90 input.jpg output.jpg

3.轉換格式
以附檔名為準,如下例就是將jpg轉換成png的用法
# convert input.jpg output.png

4.一次使用多種命令
# convert -sample 25%x25% -spread 4 \ -charcoal 4 input.jpg output.jpg

5.取得圖片寬
# identify -format "%w" D:/input.jpg

6.取得圖片高
# identify -format "%h" D:/input.jpg


原文出處:PHP5網管實驗室
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]縮圖範例(這應該是用GD做低)
這是我在別的網站上找到的~
就順便post上來給大家參考囉
而且不會失真哩,大家用用看囉~
    /*  Convert image size. true color*/
    //$src        來源檔案
    //$dest        目的檔案
    //$maxWidth    縮圖寬度
    //$maxHeight    縮圖高度
    //$quality    JPEG品質
    function ImageCopyResizedTrue($src,$dest,$maxWidth,$maxHeight,$quality=100) {
        //檢查檔案是否存在
        if (file_exists($src)  && isset($dest)) {
            $destInfo  = pathInfo($dest);
            $srcSize   = getImageSize($src); //圖檔大小
            $srcRatio  = $srcSize[0]/$srcSize[1]; // 計算寬/高
            $destRatio = $maxWidth/$maxHeight;
            if ($destRatio > $srcRatio) {
                $destSize[1] = $maxHeight;
                $destSize[0] = $maxHeight*$srcRatio;
            }
            else {
                $destSize[0] = $maxWidth;
                $destSize[1] = $maxWidth/$srcRatio;
            }
            //GIF 檔不支援輸出,因此將GIF轉成JPEG
            if ($destInfo['extension'] == "gif") $dest = substr_replace($dest, 'jpg', -3);
            //建立一個 True Color 的影像
            $destImage = imageCreateTrueColor($destSize[0],$destSize[1]);
            //根據副檔名讀取圖檔
            switch ($srcSize[2]) {
                case 1: $srcImage = imageCreateFromGif($src); break;
                case 2: $srcImage = imageCreateFromJpeg($src); break;
                case 3: $srcImage = imageCreateFromPng($src); break;
                default: return false; break;
            }
            //取樣縮圖
            ImageCopyResampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1],
                                $srcSize[0],$srcSize[1]);
            //輸出圖檔
            switch ($srcSize[2]) {
                case 1: case 2: imageJpeg($destImage,$dest,$quality); break;
                case 3: imagePng($destImage,$dest); break;
            }
            return true;
        }
        else {
            return false;
        }
    }
?>
<?
    //呼叫縮圖函式
    ImageCopyResizedTrue("pict1.jpg","pict1s.jpg",400,300);
?>


原文出處:藍色小鋪
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]強大的圖片處理工具ImageMagick

強大的圖片處理工具ImageMagick

一直聽說 ImageMagick,但今天因為需要做一個縮略圖,所以特意瞭解一下ImageMagick。

以前的站點有使用ImageMagick,可以作為PHP的dll使用,也可以用命令行的方式調用。有windows和linux等各個平台的版本,所以要用起來真的是非常方便!不作為PHP的dll,也可以通過exec調用,那更加的不錯,對於喜歡命令行做處理的人,那是相當的方便。

剛開始就想著投入到各個參數的瞭解當中,一片的英文,搞的我頭暈,看來強硬的英文水平是做技術的一個前提了,呵呵。

我想做的就是一個事情,把圖片做縮略圖,關鍵是等比縮小,取中間的部分作為圖片文件。於是剛剛開始就想著看看有哪些參數是幹嘛的,ImageMagick提供太多的功能了,以至於我這類人要瞭解完還真難,瞭解了幾個關鍵參數 -resize -crop,但用這個一步做不出圖片來,而且在windows下面還有部分命令有點問題,比如輸入:

convert aslibra.com.jpg -resize 100x100^ www.aslibra.com.jpg

沒有得到如期的效果,應該是每個邊都大於100,後來知道是需要用引號括起來,windows下還必須是雙引號,但是第一階段做了個讀取圖片寬高,實現該功能的函數:


//by hqlulu @ www.aslibra.com
function img_resize($file,$output,$w=0,$h=0,$method="resize",$center=true){

 if(!$w && !$h)return false;

 $tmp_file = "tmp_resize.jpg";
 if($method == "crop"){

   if($center){
     //先調整大小
     $wh = getimagesize($file);

     if(!$wh[0] || !$wh[1])return false;
     if(!$w || !$h)return false;
     
     if($wh[0]/$wh[1] >= $w/$h){
       img_resize($file,$tmp_file,0,$h);
     }else{
       img_resize($file,$tmp_file,$w,0);
     }
     $file = $tmp_file;
   }
   $c = " -gravity Center ";
   $m = " $c -$method {$w}x{$h}+0+0 ";
 }else{
   if($w && $h){
     $m = " -$method {$w}x{$h} ";
   }else if($w && !$h){

     $m = " -$method {$w} ";
   }else if(!$w && $h){
     $m = " -$method x{$h} ";
   }
 }
 $cmd = "convert $file $m $output";
 exec($cmd,$out);
}

後來看了一下usage,裡面有很多很多的示例,太棒了,簡直一個photoshop的教程:
http://www.imagemagick.org/Usage/

也發現了前面不能實現的功能的原因,同時發現了一句話完成我的需求的方法:

convert www.aslibra.com.jpg  -thumbnail "100x100^" -gravity center -extent 100x100  center.gif

函數可以精簡一下了,並且可以加上一個縮略圖的截取部分的比例:



function img_resize($file,$output,$w=0,$h=0,$method="resize",$percent=0){

// == usage ==
//resize by w : img_resize($file,$output,100)
//resize by h : img_resize($file,$output,0,100)
//resize by w&h : img_resize($file,$output,100,100)

//crop by w&h : img_resize($file,$output,100,100,'crop')
//crop by w&h&percent : img_resize($file,$output,100,100,'crop',0.8)
//
//2008-8-14
//by hqlulu
//www.aslibra.com
//
 if(!$w && !$h)return false;

 if($method == "crop"){
   if($percent){
     $w1=intval($w/$percent);
     $h1=intval($h/$percent);
     $m = " -thumbnail \"{$w1}x{$h1}^\" -gravity center -extent {$w}x{$h} ";
   }else{
     $m = " -thumbnail \"{$w}x{$h}^\" -gravity center -extent {$w}x{$h} ";
   }
 }else{
   if($w && $h){
     $m = " -$method {$w}x{$h} ";

   }else if($w && !$h){
     $m = " -$method {$w} ";
   }else if(!$w && $h){
     $m = " -$method x{$h} ";
   }
 }
 $cmd = "convert $file $m $output";
 exec($cmd,$out);
}


另外,如果有CMYK的圖片,那可以做個強制顏色空間
-colorspace RGB

這個功能就完成了!

以下是原圖和每個命令方式對應的結果:



convert 0.jpg -resize 100 1.jpg



convert 0.jpg -resize x100 2.jpg




convert 0.jpg -resize 100x100 3.jpg



convert 0.jpg  -thumbnail "100x100^" -gravity center -extent 100x100  4.jpg



convert 0.jpg  -thumbnail "150x150^" -gravity center -extent 100x100  5.jpg




原文出處:強大的圖片處理工具ImageMagick - 阿權的書房 - 技術經驗分享,資料收集,偶爾晾幾張相片,感言生活
本篇最重要得關鍵在:
如果有CMYK的圖片,那可以做個強制顏色空間
-colorspace RGB 
筆痕
Re: [轉貼]利用imagemagick來作縮圖
由訪客「Charles」所發表的文章。
---

//注意"跟'唷

......這種貼文,很無聊
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|