廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 6804 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
月光 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
頭銜:看我代替月亮懲罰你!看我代替月亮懲罰你!
版主
級別: 版主 該用戶目前不上站
版區: Unix-like, 網站架設
推文 x42 鮮花 x565
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[PHP][原碼] PHP-GD 縮圖失真解決方案
複製程式
<?php
// 連結到這頁的圖片語法:<img src="share_resize.php?cn=$imgfile" alt="點選圖片看大圖" border="0">
$filename =htmlspecialchars($HTTP_GET_VARS['cn']);
//echo $filename;
//echo exit;
$subname = substr($filename, strrpos($filename, ".")+1); //讀取附檔名
//echo $subname;
//echo exit;
$photo_path = "../../../upload/o/o05/".$filename; // 相片檔案的存放路徑
//echo $photo_path;
//echo exit;
// 依副檔名來判斷相片的圖形格式
switch ( strtoupper($subname) ) {
case "JPEG":
$img_Type = "JPEG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromJPEG($photo_path); // 視原圖的格式,用不同的方法讀取原圖

// 定義一個新的圖檔
// 將縮圖的尺寸設為原圖的 20%
$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImageJPEG($dst_img); // 視原圖的格式,用不同的方法將所建立的新圖檔輸出
break;
case "jpeg":
$img_Type = "JPEG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromJPEG($photo_path); // 視原圖的格式,用不同的方法讀取原圖

// 定義一個新的圖檔
// 將縮圖的尺寸設為原圖的 20%
$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImageJPEG($dst_img); // 視原圖的格式,用不同的方法將所建立的新圖檔輸出
break;
case "JPG":
$img_Type = "JPEG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromJPEG($photo_path);

$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}


//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImageJPEG($dst_img);
break;
case "jpg":
$img_Type = "JPEG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromJPEG($photo_path);

$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImageJPEG($dst_img);
break;
case "JPE":
$img_Type = "JPEG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromJPEG($photo_path);

$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImageJPEG($dst_img);
break;
case "GIF":
$img_Type = "GIF";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromGIF($photo_path);

$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImageGIF($dst_img);
break;
case "PNG":
$img_Type = "PNG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromPNG($photo_path);

$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImagePNG($dst_img);
break;
case "png":
$img_Type = "PNG";
header("Content-type: image/" . $img_Type); // 傳 Header 給瀏覽器,告知圖檔格式
$src_img = ImageCreateFromPNG($photo_path);

$new_W = ImageSX($src_img) * 0.2; //取得圖形的寬度
$new_H = ImageSY($src_img) * 0.2; //取得圖形的高度
if ( $new_W > 150 ) { // 不讓縮圖的寬度多於 150,以免相片太大
$new_H = ( 150 / $new_W ) * $new_H;
$new_W = 150;
}

//2.0xx版使用
$dst_img = imagecreatetruecolor($new_W, $new_H);
//舊版使用
//$dst_img = ImageCreate($new_W, $new_H);

// 將原圖複製、調整尺寸,再貼在新圖上
//2.0xx版使用
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));
//舊版使用
//ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img));

ImagePNG($dst_img);
break;
}
// 分別釋放 $dst_img 與 $src_img 所佔用的儲存空間
ImageDestroy($dst_img);
ImageDestroy($src_img);
?> 



月光論壇
http://bbs.dj...com/


===================================
贊助本站 -- 刊登廣告 -- 物超所值虛擬主機租用
獻花 x0 回到頂端 [樓 主] From:臺灣中華電信HINET | Posted:2007-05-14 20:36 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.016622 second(s),query:15 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言