|
發表者 |
討論內容 |
冷日 (冷日) |
發表時間:2008/9/19 8:43 |
- 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
|
|
冷日 (冷日) |
發表時間:2008/9/19 8:48 |
- 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網管實驗室
|
|
|
冷日 (冷日) |
發表時間:2008/9/19 8:54 |
- 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);
?>
原文出處:藍色小鋪
|
|
|
冷日 (冷日) |
發表時間:2009/5/7 9:02 |
- 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
|
|
筆痕 |
發表時間:2011/7/15 9:19 |
|
- Re: [轉貼]利用imagemagick來作縮圖
- 由訪客「Charles」所發表的文章。
---
//注意"跟'唷
......這種貼文,很無聊
|
|
|