PHP利用GD库处理图片方法实现

图片处理函数

    http://www.runoob.com/php/php-image-gd.html

 

添加水印(文字和图片)

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

<?php

/**

 * [创建图片文字水印]

 * @param  [string] $imagename [需要添加水印的值]

 * @param  [string] $string    [图片上添加的文字]

 * @param  [string] $locate    [水印位置,center,left_buttom,right_buttom三选一]

 * @return [null]            [description]

 */

function create_words_watermark($imagename,$string,$locate){

    list($width,$height,$type)=getimagesize($imagename);

    $types=array(1 => "GIF",2 => "JPEG",3 => "PNG",

        4 => "SWF",5 => "PSD",6 => "BMP",

        7 => "TIFF",8 => "TIFF",9 => "JPC",

        10 => "JP2",11 => "JPX",12 => "JB2",

        13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");

    $type=strtolower($types[$type]);

    $create="imagecreatefrom".$type;

    $img=$create($imagename);//imagecreatefromjpeg() 成功后返回图象资源,失败后返回 FALSE

 

    $string_color=imagecolorallocate($img,200, 200, 200);

    $fontsize=4;

     

    // 图片的宽和高也可用下面两个函数获得

    // $width=imagesx($img);

    // $height=imagesy($img);

     

    switch($locate){

        case 'center':

            $x=($width-imagefontwidth($fontsize)*strlen($string))/2;

            $y=($height-imagefontheight($fontsize))/2;

            break;

        case 'left_buttom':

            $x=5;

            $y=($height-imagefontheight($fontsize)-3);

            break;

        case 'right_buttom':

            $x=($width-imagefontwidth($fontsize)*strlen($string)-3);

            $y=($height-imagefontheight($fontsize)-3);

            break;

        default:

            die("未指定水印位置!");

            break;

    }

     

    imagestring($img,$fontsize,$x,$y,$string,$string_color);

    imagestring($img,$fontsize,$x+1,$y+1,$string,$string_color);

    //imagegif()、imagejpeg()、imagepng() 和 imagewbmp() 函数分别允许以 GIF、JPEG、PNG 和 WBMP 格式将图像输出到浏览器或文件

    $save="image".$type;

    //保存

    //$save($img,"new_".$imagename);

     

    //显示

    header("content-type:image/".$type);

    $save($img);

    imagedestroy($img); //$img资源使用结束,销毁

}

// create_words_watermark("test.png","hello world","right_buttom");

 

/**

 * [create_pic_watermark 添加图片水印]

 * @param  [string] $dest_image [需要添加图片水印的图片名]

 * @param  [string] $watermark  [水印图片名]

 * @param  [string] $locate     [水印位置,center,left_buttom,right_buttom三选一]

 * @return [type]             [description]

 */

function create_pic_watermark($dest_image,$watermark,$locate){

    list($dwidth,$dheight,$dtype)=getimagesize($dest_image);

    list($wwidth,$wheight,$wtype)=getimagesize($watermark);

 

    $types=array(1 => "GIF",2 => "JPEG",3 => "PNG",

        4 => "SWF",5 => "PSD",6 => "BMP",

        7 => "TIFF",8 => "TIFF",9 => "JPC",

        10 => "JP2",11 => "JPX",12 => "JB2",

        13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");

 

    $dtype=strtolower($types[$dtype]);//原图类型

    $wtype=strtolower($types[$wtype]);//水印图片类型

 

    $created="imagecreatefrom".$dtype;

    $createw="imagecreatefrom".$wtype;

     

    $imgd=$created($dest_image);

    $imgw=$createw($watermark);

 

    switch($locate){

        case 'center':

            $x=($dwidth-$wwidth)/2;

            $y=($dheight-$wheight)/2;

            break;

        case 'left_buttom':

            $x=1;

            $y=($dheight-$wheight-2);

            break;

        case 'right_buttom':

            $x=($dwidth-$wwidth-1);

            $y=($dheight-$wheight-2);

            break;

        default:

            die("未指定水印位置!");

            break;

    }

 

    imagecopy($imgd,$imgw,$x,$y,0,0, $wwidth,$wheight);

 

    $save="image".$dtype;

 

    //显示

    header("content-type:image/".$dtype);

    $save($imgd);

 

    imagedestroy($imgw);

    imagedestroy($imgd);

}

 

create_pic_watermark("ganlixin.jpg","test.png","left_buttom");

?>

 

剪切图片

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

2

<?php

/**

 * [cut_image]                  从原图中剪切一部分

 * @param  [string] $old_imagename [需要剪切的图片名]

 * @param  [int] $start_width   [从原图片宽为的$start_width开始剪切]

 * @param  [int] $start_height  [从原图片高为的$start_height开始剪切]

 * @param  [int] $new_width     [从原图片中剪切$new_width的宽度]

 * @param  [int] $new_height    [从原图片中剪切$new_height的高度]

 * @return [null]                [null]

 */

function cut_image($old_imagename,$start_width,$start_height,$new_width,$new_height){

    list($old_width,$old_height,$type)=getimagesize($old_imagename);

    $types=array(1 => "GIF",2 => "JPEG",3 => "PNG",

        4 => "SWF",5 => "PSD",6 => "BMP",

        7 => "TIFF",8 => "TIFF",9 => "JPC",

        10 => "JP2",11 => "JPX",12 => "JB2",

        13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");

    $type=strtolower($types[$type]);

    $create="imagecreatefrom".$type;

 

    $old_img=$create($old_imagename);

/*

用imagecreatetruecolor(int x,int y)建立的是一幅大小为 x和 y的黑色图像(默认为黑色),如想改变背景颜色则需要用填充颜色函数imagefill($img,0,0,$color);   imagecreate 新建一个空白图像资源,用imagecolorAllocate()添加背景色

*/

    $new_img=imagecreatetruecolor($new_width, $new_height);

/*

bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h ,int $src_w , int $src_h )

$dst_image:新建的图片

$src_image:需要载入的图片

$dst_x:设定需要载入的图片在新图中的x坐标

$dst_y:设定需要载入的图片在新图中的y坐标

$src_x:设定载入图片要载入的区域x坐标

$src_y:设定载入图片要载入的区域y坐标

$dst_w:设定载入的原图的宽度(在此设置缩放)

$dst_h:设定载入的原图的高度(在此设置缩放)

$src_w:原图要载入的宽度

$src_h:原图要载入的高度

*/

    imagecopyresampled($new_img,$old_img,0,0,$start_width,$start_height,$new_width,$new_height,$new_width,$new_height);

    $save="image".$type;

 

    //保存

    //$save($new_img,"new_".$old_imagename);

     

    //显示

    header("content-type:image/".$type);

    $save($new_img);

 

    //销毁

    imagedestroy($old_img);

    imagedestroy($new_img);

}

 

cut_image("ganlixin.jpg",0,0,200,200);

?>

  

翻转图片

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

<?php

/**

 * [rotate_image 图片旋转]

 * @param  [string] $imagename [要进行旋转的图片名]

 * @param  [string] $angle     [旋转的角度,逆时针为正]

 * @return [null]            [description]

 */

function rotate_image($imagename,$angle){

    list($width,$height,$type)=getimagesize($imagename);

    $types=array(1 => "GIF",2 => "JPEG",3 => "PNG",

        4 => "SWF",5 => "PSD",6 => "BMP",

        7 => "TIFF",8 => "TIFF",9 => "JPC",

        10 => "JP2",11 => "JPX",12 => "JB2",

        13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");

    $type=$types[$type];

 

    $create="imagecreatefrom".$type;

    $img=$create($imagename);

    $new_img=imagerotate($img,$angle,0);

    $save="image".$type;

 

    //显示

    header("content-type:image/".$type);

    $save($new_img);

 

    // 保存

    // $save($new_img,"new_".$imagename);

 

    imagedestroy($img);

    imagedestroy($new_img);

}

 

rotate_image("ganlixin.jpg",-90);

 

?>

  

翻转图片

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

<?php

/**

 * [overturn_image 翻转图片]

 * @param  [string] $imagename [要反转的图片名]

 * @param  [char] $method    [按x轴或y轴翻转,只有x,y选项]

 * @return [type]            [description]

 */

function overturn_image($imagename,$method){

    $method=strtolower($method);

    list($width,$height,$type)=getimagesize($imagename);

    $types=array(1 => "GIF",2 => "JPEG",3 => "PNG",

        4 => "SWF",5 => "PSD",6 => "BMP",

        7 => "TIFF",8 => "TIFF",9 => "JPC",

        10 => "JP2",11 => "JPX",12 => "JB2",

        13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");

    $type=$types[$type];

 

    $create="imagecreatefrom".$type;

    $img=$create($imagename);//源图片

    $new_img=imagecreatetruecolor($width,$height);//翻转之后的图片

 

    if($method=='y'){

        for($i=0;$i<$width;$i++){

            imagecopy($new_img,$img,$width-$i-1,0,$i,0,1,$height);

        }

    } else if($method=='x'){

        for($i=0;$i<$height;$i++){

            imagecopy($new_img,$img,0,$height-$i-1,0,$i,$width,1);

        }

    }

    $save="image".$type;

 

    //显示

    header("content-type:image/".$type);

    $save($new_img);

 

    // 保存

    // $save($new_img,"new_".$imagename);

 

    imagedestroy($img);

    imagedestroy($new_img);

}

overturn_image("ganlixin.jpg","y");

?>

 

参考:

    http://www.cnblogs.com/-beyond/p/7218226.html

转载于:https://my.oschina.net/ganfanghua/blog/1619831

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值