Home > Backend Development > PHP Tutorial > PHP image manipulation class (picture watermarking)

PHP image manipulation class (picture watermarking)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-07-25 09:00:38
Original
1414 people have browsed it
We provide you with a PHP image manipulation class that can add watermarks to images. Friends in need can refer to it.

Complete code for image manipulation class.

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

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

<?php

/*

$img = new Image('pic.jpg');

//$img->changeSize(80,50);//改变尺寸

$img->changeSize(80);//改变尺寸

$img->create();

$img->free();

$img = new Image('pic.jpg');

$img->addWatermark('logo.jpg', 50); //添加水印,第一个参数是水印的图片地址,第二个参数是透明值

$img->create();

$img->free();

site http://bbs.it-home.org

*/

class Image {

    var $imageResource = NULL;

    var $target = NULL;

    var $enableTypes = array();

    var $imageInfo = array();

    var $createFunc = '';

    var $imageType = NULL;

      

    /* Construct for this class

     * @param string $image

     * @return Image

     */

    function Image($image = NULL) {

        //get enables

        if(imagetypes() & IMG_GIF) {

            $this->enableTypes[] = 'image/gif';

        }

        if(imagetypes() & IMG_JPEG) {

            $this->enableTypes[] = 'image/jpeg';

        }

        if (imagetypes() & IMG_JPG) {

            $this->enableTypes[] = 'image/jpg';

        }

        if(imagetypes() & IMG_PNG) {

            $this->enableTypes[] = 'image/png';

        }

        //end get

          

        if($image != NULL) {

            $this->setImage($image);

        }

    }

      

    /* set a image resource

     * @param string $image

     * @return boolean

     */

    function setImage($image) {

        if(file_exists($image) && is_file($image)) {

            $this->imageInfo = getimagesize($image);

            $img_mime = strtolower($this->imageInfo['mime']);

            if(!in_array($img_mime, $this->enableTypes)) {

                exit('系统不能操作这种图片类型.');

            }

            switch ($img_mime) {

                case 'image/gif':

                    $link = imagecreatefromgif($image);

                    $this->createFunc = 'imagegif';

                    $this->imageType = 'gif';

                    break;

                case 'image/jpeg':

                case 'image/jpg':

                    $link = imagecreatefromjpeg($image);

                    $this->createFunc = 'imagejpeg';

                    $this->imageType = 'jpeg';

                    break;

                case 'image/png':

                    $link = imagecreatefrompng($image);

                    $this->createFunc = 'imagepng';

                    $this->imageType = 'png';

                    break;

                default:

                    $link = 'unknow';

                    $this->imageType = 'unknow';

                    break;

            }

            if($link !== 'unknow') {

                $this->imageResource = $link;

            } else {

                exit('这种图片类型不能改变尺寸.');

            }

            unset($link);

            return true;

        } else {

            return false;

        }

    }

      

    /*set header*/

    function setHeader() {

        switch ($this->imageType) {

            case 'gif':

                header('content-type:image/gif');

                break;

            case 'jpeg':

                header('content-type:image/jpeg');

                break;

            case 'png':

                header('content-type:image/png');

                break;

            default:

                exit('Can not set header.');

                break;

        }

        return true;

    }

      

    /* change the image size

     * @param int $width

     * @param int $height

     * @return boolean

     */

    function changeSize($width, $height = -1) {

        if(!is_resource($this->imageResource)) {

            exit('不能改变图片的尺寸,可能是你没有设置图片来源.');

        }

        $s_width = $this->imageInfo[0];

        $s_height = $this->imageInfo[1];

        $width = intval($width);

        $height = intval($height);

          

        if($width <= 0) exit('图片宽度必须大于零.');

        if($height <= 0) {

            $height = ($s_height / $s_width) * $width;

        }

          

        $this->target = imagecreatetruecolor($width, $height);

        if(@imagecopyresized($this->target, $this->imageResource, 0, 0, 0, 0, $width, $height, $s_width, $s_height))

            return true;

        else

            return false;

    }

      

    /* Add watermark

     * @param string $image

     * @param int $app

     */

    function addWatermark($image, $app = 50) {

        if(file_exists($image) && is_file($image)) {

            $s_info = getimagesize($image);

        } else {

            exit($image . '文件不存在.');

        }

        $r_width = $s_info[0];

        $r_height = $s_info[1];

        if($r_width > $this->imageInfo[0]) exit('水印图片必须小于目标图片');

        if($r_height > $this->imageInfo[1]) exit('水印图片必须小于目标图片');

          

        switch ($s_info['mime']) {

            case 'image/gif':

                $resource = imagecreatefromgif($image);

                break;

            case 'image/jpeg':

            case 'image/jpg':

                $resource = imagecreatefromjpeg($image);

                break;

            case 'image/png':

                $resource = imagecreatefrompng($image);

                break;

            default:

                exit($s_info['mime'] .'类型不能作为水印来源.');

                break;

        }

          

        $this->target = &$this->imageResource;

        imagecopymerge($this->target, $resource, $this->imageInfo[0] - $r_width - 5,

$this->imageInfo[1] - $r_height - 5, 0,0 ,$r_width, $r_height, $app);

        imagedestroy($resource);

        unset($resource);

    }

      

    /* create image

     * @param string $name

     * @return boolean

     */

    function create($name = NULL) {

        $function = $this->createFunc;

        if($this->target != NULL && is_resource($this->target)) {

            if($name != NULL) {

                $function($this->target, $name);

            } else {

                $function($this->target);

            }

            return true;

        } else if($this->imageResource != NULL && is_resource($this->imageResource)) {

            if($name != NULL) {

                $function($this->imageResource, $name);

            } else {

                $function($this->imageResource);

            }

            return true;

        } else {

            exit('不能创建图片,原因可能是没有设置图片来源.');

        }

    }

      

    /*free resource*/

    function free() {

        if(is_resource($this->imageResource)) {

            @imagedestroy($this->imageResource);

        }

        if(is_resource($this->target)) {

            @imagedestroy($this->target);

        }

    }

}

?>

Copy after login


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template