PHP生成图片缩略图的三种方法:
1、把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)
2、把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)
3、把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)
下面是代码:
<?php
// +----------------------------------------------------------------------
// | 把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)
// +----------------------------------------------------------------------
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "stand_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
function image_resize($f, $t, $tw, $th){
// 按指定大小生成缩略图,而且不变形,缩略图函数
$temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
list($fw, $fh, $tmp) = getimagesize($f);
if(!$temp[$tmp]){
return false;
}
$tmp = $temp[$tmp];
$infunc = "imagecreatefrom$tmp";
$outfunc = "image$tmp";
$fimg = $infunc($f);
// 使缩略后的图片不变形,并且限制在 缩略图宽高范围内
if($fw/$tw > $fh/$th){
$th = $tw*($fh/$fw);
}else{
$tw = $th*($fw/$fh);
}
$timg = imagecreatetruecolor($tw, $th);
imagecopyresampled($timg, $fimg, 0,0, 0,0, $tw,$th, $fw,$fh);
if($outfunc($timg, $t)){
return true;
}else{
return false;
}
}
?>
<?php
// +----------------------------------------------------------------------
// | 把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)
// +----------------------------------------------------------------------
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "cut_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
// 按指定大小生成缩略图,而且不变形,缩略图函数
function image_resize($f, $t, $tw, $th){
$temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
list($fw, $fh, $tmp) = getimagesize($f);
if(!$temp[$tmp]){
return false;
}
$tmp = $temp[$tmp];
$infunc = "imagecreatefrom$tmp";
$outfunc = "image$tmp";
$fimg = $infunc($f);
// $fw = 10;
// $fh = 4;
// $tw = 4;
// $th = 2;
// 把图片铺满要缩放的区域
if($fw/$tw > $fh/$th){
$zh = $th;
$zw = $zh*($fw/$fh);
$_zw = ($zw-$tw)/2;
}else{
$zw = $tw;
$zh = $zw*($fh/$fw);
$_zh = ($zh-$th)/2;
}
// echo $zw."<br>";
// echo $zh."<br>";
// echo $_zw."<br>";
// echo $_zh."<br>";
// exit;
$zimg = imagecreatetruecolor($zw, $zh);
// 先把图像放满区域
imagecopyresampled($zimg, $fimg, 0,0, 0,0, $zw,$zh, $fw,$fh);
// 再截取到指定的宽高度
$timg = imagecreatetruecolor($tw, $th);
imagecopyresampled($timg, $zimg, 0,0, 0+$_zw,0+$_zh, $tw,$th, $zw-$_zw*2,$zh-$_zh*2);
//
if($outfunc($timg, $t)){
return true;
}else{
return false;
}
}
?>
<?php
// +----------------------------------------------------------------------
// | 把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)
// +----------------------------------------------------------------------
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "strict_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
function image_resize($f, $t, $tw, $th){
// 按指定大小生成缩略图,而且不变形,缩略图函数
$temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
list($fw, $fh, $tmp) = getimagesize($f);
if(!$temp[$tmp]){
return false;
}
$tmp = $temp[$tmp];
$infunc = "imagecreatefrom$tmp";
$outfunc = "image$tmp";
$fimg = $infunc($f);
if($fw/$tw > $fh/$th){
$fw = $tw * ($fh/$th);
}else{
$fh = $th * ($fw/$tw);
}
$timg = imagecreatetruecolor($tw, $th);
imagecopyresampled($timg, $fimg, 0,0, 0,0, $tw,$th, $fw,$fh);
if($outfunc($timg, $t)){
return true;
}else{
return false;
}
}
?>转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/139.html
1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意


