使用PHP生成图片的缩略图的方法

2025-05-29 0 65

功能:支持jpg,jpeg,gif,png,bmp图片格式,支持按原图片的比例进行缩放,可以选择在图片缩放的过程中是否需要对图片进行裁切,加入了图片质量控制,可以实现缩略图片质量最高化。完整类的代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161
<?php

/**

* 功能:php生成缩略图片的类

*/

class ResizeImage{

public $type;//图片类型

public $width;//实际宽度

public $height;//实际高度

public $resize_width;//改变后的宽度

public $resize_height;//改变后的高度

public $cut;//是否裁图

public $srcimg;//源图象

public $dstimg;//目标图象地址

public $im;//临时创建的图象

public $quality;//图片质量

function resizeimage($img,$wid,$hei,$c,$dstpath,$quality=100){

$this->srcimg=$img;

$this->resize_width=$wid;

$this->resize_height=$hei;

$this->cut=$c;

$this->quality=$quality;

$this->type=strtolower(substr(strrchr($this->srcimg,'.'),1));//图片的类型

$this->initi_img();//初始化图象

$this -> dst_img($dstpath);//目标图象地址

@$this->width=imagesx($this->im);

@$this->height=imagesy($this->im);

$this->newimg();//生成图象

@ImageDestroy($this->im);

}

function newimg(){

$resize_ratio=($this->resize_width)/($this->resize_height);//改变后的图象的比例

@$ratio=($this->width)/($this->height);//实际图象的比例

if(($this->cut)=='1'){//裁图

if($img_func==='imagepng'&&(str_replace('.','',PHP_VERSION)>=512)){ //针对php版本大于5.12参数变化后的处理情况

$quality=9;

}

if($ratio>=$resize_ratio){//高度优先

$newimg=imagecreatetruecolor($this->resize_width,$this->resize_height);

imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,$this->resize_height,(($this->height)*$resize_ratio),$this->height);

imagejpeg($newimg,$this->dstimg,$this->quality);

}

if($ratio<$resize_ratio){//宽度优先

$newimg=imagecreatetruecolor($this->resize_width,$this->resize_height);

imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,$this->resize_height,$this->width,(($this->width)/$resize_ratio));

imagejpeg($newimg,$this->dstimg,$this->quality);

}

}else{//不裁图

if($ratio>=$resize_ratio){

$newimg=imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);

imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,($this->resize_width)/$ratio,$this->width,$this->height);

imagejpeg($newimg,$this->dstimg,$this->quality);

}

if($ratio<$resize_ratio){

@$newimg=imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height);

@imagecopyresampled($newimg,$this->im,0,0,0,0,($this->resize_height)*$ratio,$this->resize_height,$this->width,$this->height);

@imagejpeg($newimg,$this->dstimg,$this->quality);

}

}

}

function initi_img(){//初始化图象

if($this->type=='jpg' || $this->type=='jpeg'){

$this->im=imagecreatefromjpeg($this->srcimg);

}

if($this->type=='gif'){

$this->im=imagecreatefromgif($this->srcimg);

}

if($this->type=='png'){

$this->im=imagecreatefrompng($this->srcimg);

}

if($this->type=='wbm'){

@$this->im=imagecreatefromwbmp($this->srcimg);

}

if($this->type=='bmp'){

$this->im=$this->ImageCreateFromBMP($this->srcimg);

}

}

function dst_img($dstpath){//图象目标地址

$full_length=strlen($this->srcimg);

$type_length=strlen($this->type);

$name_length=$full_length-$type_length;

$name=substr($this->srcimg,0,$name_length-1);

$this->dstimg=$dstpath;

//echo $this->dstimg;

}

function ImageCreateFromBMP($filename){ //自定义函数处理bmp图片

if(!$f1=fopen($filename,"rb"))returnFALSE;

$FILE=unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset",fread($f1,14));

if($FILE['file_type']!=19778)returnFALSE;

$BMP=unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'.

'/Vcompression/Vsize_bitmap/Vhoriz_resolution'.

'/Vvert_resolution/Vcolors_used/Vcolors_important',fread($f1,40));

$BMP['colors']=pow(2,$BMP['bits_per_pixel']);

if($BMP['size_bitmap']==0)$BMP['size_bitmap']=$FILE['file_size']-$FILE['bitmap_offset'];

$BMP['bytes_per_pixel']=$BMP['bits_per_pixel']/8;

$BMP['bytes_per_pixel2']=ceil($BMP['bytes_per_pixel']);

$BMP['decal']=($BMP['width']*$BMP['bytes_per_pixel']/4);

$BMP['decal']-=floor($BMP['width']*$BMP['bytes_per_pixel']/4);

$BMP['decal']=4-(4*$BMP['decal']);

if($BMP['decal']==4)$BMP['decal']=0;

$PALETTE=array();

if($BMP['colors']<16777216)

{

$PALETTE=unpack('V'.$BMP['colors'],fread($f1,$BMP['colors']*4));

}

$IMG=fread($f1,$BMP['size_bitmap']);

$VIDE=chr(0);

$res=imagecreatetruecolor($BMP['width'],$BMP['height']);

$P=0;

$Y=$BMP['height']-1;

while($Y>=0)

{

$X=0;

while($X<$BMP['width'])

{

if($BMP['bits_per_pixel']==24)

$COLOR=unpack("V",substr($IMG,$P,3).$VIDE);

elseif($BMP['bits_per_pixel']==16)

{

$COLOR=unpack("n",substr($IMG,$P,2));

$COLOR[1]=$PALETTE[$COLOR[1]+1];

}

elseif($BMP['bits_per_pixel']==8)

{

$COLOR=unpack("n",$VIDE.substr($IMG,$P,1));

$COLOR[1]=$PALETTE[$COLOR[1]+1];

}

elseif($BMP['bits_per_pixel']==4)

{

$COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1));

if(($P*2)%2==0)$COLOR[1]=($COLOR[1]>>4);else$COLOR[1]=($COLOR[1]&0x0F);

$COLOR[1]=$PALETTE[$COLOR[1]+1];

}

elseif($BMP['bits_per_pixel']==1)

{

$COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1));

if(($P*8)%8==0)$COLOR[1]=$COLOR[1]>>7;

elseif(($P*8)%8==1)$COLOR[1]=($COLOR[1]&0x40)>>6;

elseif(($P*8)%8==2)$COLOR[1]=($COLOR[1]&0x20)>>5;

elseif(($P*8)%8==3)$COLOR[1]=($COLOR[1]&0x10)>>4;

elseif(($P*8)%8==4)$COLOR[1]=($COLOR[1]&0x8)>>3;

elseif(($P*8)%8==5)$COLOR[1]=($COLOR[1]&0x4)>>2;

elseif(($P*8)%8==6)$COLOR[1]=($COLOR[1]&0x2)>>1;

elseif(($P*8)%8==7)$COLOR[1]=($COLOR[1]&0x1);

$COLOR[1]=$PALETTE[$COLOR[1]+1];

}

else

returnFALSE;

imagesetpixel($res,$X,$Y,$COLOR[1]);

$X++;

$P+=$BMP['bytes_per_pixel'];

}

$Y--;

$P+=$BMP['decal'];

}

fclose($f1);

return$res;

}

}

?>

使用方法很简单代码如下:

?

1
$resizeimage=new ResizeImage('upload/abc.bmp', '120', '90', '0', 'upload/xabc.bmp');


另外一个强大的PHP图片缩略图类:phpThumb

该类除了缩放图片外,还能将图片转换成不同的格式输出(比如将GIF格式的图片输出为PNG格式),其特色功能还包括色彩、特效等

官方网址:http://phpthumb.sourceforge.net/

We'll be using phpThumb , the open source PHP script to generate thumbnails on the fly.

Download and extract phpThumb to somewhere in your website folder. Now to use a rounded corner thumbnail of an image, simply use the img tag of HTML with src as

?

1

2

3

4

5

6

7

8

9

10

11
<img src=”phpThumb.php?src=test.jpg&w=200&h=150&fltr[]=ric|20|20&f=png” />

Adjust the path to phpThumb according to where you place the phpThumb files.

<html>

<head>

</head>

<body>

<img src="phpThumb/phpThumb.php?src=../images/test.jpg&w=400&fltr[]=fram|3|2|CC9966|333333|CCCCCC" alt="">

</body>

</html>

一般只需要下面的文件就可以了

其实phpThumb的功能比我原先想象的要强大一些,下面把他的其他一些有用的参数列一下:

src:目标图片的地址

w:输出图片的宽度

h:输出图片的高度(如果不指定他将按w参数等比缩放)

q:输出如果是JPG格式的,可以规定它的输出质量

bg:输出时的背景(如果需要)

sw、sh、sx、sy:局部输出,宽高、起始位置

f:输出格式,可以为jpeg、png、gif、ico

sfn:输出gif动画中的某一帧

fltr[]:滤镜,可以有很多效果,包括锐化、模糊、旋翻转、水印、边框、遮照、色彩调整等

使用演示:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34
//加载类库文件

require_once 'path/to/ThumbLib.inc.php';

//实例化类库,传入你要处理的图片的地址可以是网络地址,也可以是本地地址

$thumb = PhpThumbFactory::create('http://www.shlongyingjixie.com/');

//把图片等比缩小到最大宽度 100px或者最高100px,当只输入一个参数的时候,是限制最宽的尺寸。

$thumb->resize(100, 100);

//把图片等比缩小到原来的百分数,比如50就是原来的50%。

$thumb->resizePercent(50);

//截取一个175px * 175px的图片,注意这个是截取,超出的部分直接裁切掉,不是强制改变尺寸。

$thumb->adaptiveResize(175, 175);

//从图片的中心计算,截取200px * 100px的图片。

$thumb->cropFromCenter(200, 100);

//截图,前两个参数分别是需要解出的图片的右上角的坐标X,Y。 后面两个参数是需要解出的图片宽,高。

$thumb->crop(100, 100, 300, 200);

//把图片顺时针反转180度

$thumb->rotateImageNDegrees(180);

//保存(生成)图片,你可以保存其他格式,详细参考文档

$thumb->save( 'NewPath/Of/image.jpg ' );

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 使用PHP生成图片的缩略图的方法 https://www.kuaiidc.com/100683.html

相关文章

发表评论
暂无评论