Home > Backend Development > PHP Tutorial > Detailed explanation of image resize function in PHP to adjust image size

Detailed explanation of image resize function in PHP to adjust image size

黄舟
Release: 2023-03-14 13:32:01
Original
7637 people have browsed it

I have used some image resize functions implemented in PHP, but they are not perfect. Some pictures are completely deformed after adjustment, and some have more lines for no reason, and some have poor color brightness. Not satisfactory either. Today I searched again and gained some more results.

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

if(isset($_FILES['manager_photo']) && !empty($_FILES['manager_photo']['name']))

    {

        $photo_name=$manager_name."-".$_FILES["manager_photo"]["name"];

        $tmpname = $_FILES['manager_photo']['tmp_name'];

        $file_ext= substr($photo_name, strripos($photo_name, '.'));  

        $dir = "./manager_photos/";

        // finally resize

        @img_resize( $tmpname , 90 ,  $dir , $photo_name, 1);

}

function img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight = 0 )

    {

    $save_dir     .= ( substr($save_dir,-1) != "/") ? "/" : "";

    $gis        = getimagesize($tmpname);

    $type        = $gis[2];

    switch($type)

        {

        case "1": $imorig = imagecreatefromgif($tmpname); break;

        case "2": $imorig = imagecreatefromjpeg($tmpname);break;

        case "3": $imorig = imagecreatefrompng($tmpname); break;

        default$imorig = imagecreatefromjpeg($tmpname);

        }

        $x = imagesx($imorig);

        $y = imagesy($imorig);

        $woh = (!$maxisheight)? $gis[0] : $gis[1] ;

        if($woh <= $size)

        {

        $aw = $x;

        $ah = $y;

        }

            else

        {

            if(!$maxisheight){

                $aw = $size;

                $ah = $size * $y / $x;

            } else {

                $aw = $size * $x / $y;

                $ah = $size;

            }

        }

        $im = imagecreatetruecolor($aw,$ah);

    if (imagecopyresampled($im,$imorig , 0,0,0,0,$aw,$ah,$x,$y))

        if (imagejpeg($im, $save_dir.$save_name))

            return true;

            else

            return false;

}//img_resize

Copy after login

Use ImageMagick to implement it

Someone mentioned using ImageMagick to implement it. There are many options in it, and we can achieve image adjustment with very little code. Worth studying.

1

2

3

4

5

6

7

$image = new Imagick($src);

$image->resizeImage($width,$height,Imagick::FILTER_LANCZOS,1);

$image->cropImage($width_2, $height_2, $x, $y);

$image->setCompression(Imagick::COMPRESSION_JPEG);

$image->setImageCompressionQuality(82);

$image->writeImage($dest);

$image->destroy();

Copy after login

Use php_class_upload to implement

If the above introduction is not suitable for you, you can not only upload and adjust images, but also cut, cut, add watermarks, rotate, flip, etc.

Other implementation code reference

This code can return the picture and the correct name, but can it only be black?

1

2

3

4

5

6

7

8

9

function resize($originalImage){

list($width, $height) = getimagesize($originalImage);

$newName=basename($originalImage);

$imageResized = imagecreatetruecolor(128, 128);

$imageTmp = imagecreatefromjpeg($originalImage);

imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, 128, 128, $width, $height);

imagejpeg($imageResized, "resizedImg/$newName",100);

imageDestroy($imageResized);

}

Copy after login

After the code is improved, look at the following code to set the color.

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

function resizeImage($file){

        define (&#39;MAX_WIDTH&#39;, 1500);//max image width             

        define (&#39;MAX_HEIGHT&#39;, 1500);//max image height

        define (&#39;MAX_FILE_SIZE&#39;, 10485760);

        //iamge save path

        $path = &#39;storeResize/&#39;;

        //size of the resize image

        $new_width = 128;

        $new_height = 128;  

        //name of the new image         

        $nameOfFile = &#39;resize_&#39;.$new_width.&#39;x&#39;.$new_height.&#39;_&#39;.basename($file[&#39;name&#39;]);    

        $image_type = $file[&#39;type&#39;];

        $image_size = $file[&#39;size&#39;];

        $image_error = $file[&#39;error&#39;];

        $image_file = $file[&#39;tmp_name&#39;];

        $image_name = $file[&#39;name&#39;];      

        $image_info = getimagesize($image_file);

        //check image type

        if ($image_info[&#39;mime&#39;] == &#39;image/jpeg&#39; or $image_info[&#39;mime&#39;] == &#39;image/jpg&#39;){  

        }

        else if ($image_info[&#39;mime&#39;] == &#39;image/png&#39;){  

        }

        else if ($image_info[&#39;mime&#39;] == &#39;image/gif&#39;){  

        }

        else{          

            //set error invalid file type

        }

        if ($image_error){

            //set error image upload error

        }

        if ( $image_size > MAX_FILE_SIZE ){

            //set error image size invalid

        }

        switch ($image_info[&#39;mime&#39;]) {

            case &#39;image/jpg&#39;: //This isn&#39;t a valid mime type so we should probably remove it

            case &#39;image/jpeg&#39;:

            $image = imagecreatefromjpeg ($image_file);

            break;

            case &#39;image/png&#39;:

            $image = imagecreatefrompng ($image_file);

            break;

            case &#39;image/gif&#39;:

            $image = imagecreatefromgif ($image_file);

            break;

        }  

        if ($new_width == 0 && $new_height == 0) {

            $new_width = 100;

            $new_height = 100;

        }

        // ensure size limits can not be abused

        $new_width = min ($new_width, MAX_WIDTH);

        $new_height = min ($new_height, MAX_HEIGHT);

        //get original image h/w

        $width = imagesx ($image);

        $height = imagesy ($image);

        //$align = &#39;b&#39;;

        $zoom_crop = 1;

        $origin_x = 0;

        $origin_y = 0;

        //TODO setting Memory

        // generate new w/h if not provided

        if ($new_width && !$new_height) {

            $new_height = floor ($height * ($new_width / $width));

        } else if ($new_height && !$new_width) {

            $new_width = floor ($width * ($new_height / $height));

        }

        // scale down and add borders

        if ($zoom_crop == 3) {

         $final_height = $height * ($new_width / $width);

         if ($final_height > $new_height) {

            $new_width = $width * ($new_height / $height);

         } else {

            $new_height = $final_height;

         }

        }

        // create a new true color image

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

        imagealphablending ($canvas, false);

        if (strlen ($canvas_color) < 6) {

            $canvas_color = &#39;ffffff&#39;;     

        }

        $canvas_color_R = hexdec (substr ($canvas_color, 0, 2));

        $canvas_color_G = hexdec (substr ($canvas_color, 2, 2));

        $canvas_color_B = hexdec (substr ($canvas_color, 2, 2));

        // Create a new transparent color for image

        $color = imagecolorallocatealpha ($canvas, $canvas_color_R, $canvas_color_G,$canvas_color_B, 127);

        // Completely fill the background of the new image with allocated color.

        imagefill ($canvas, 0, 0, $color);

        // scale down and add borders

        if ($zoom_crop == 2) {

            $final_height = $height * ($new_width / $width);

          if ($final_height > $new_height) {

            $origin_x = $new_width / 2;

            $new_width = $width * ($new_height / $height);

            $origin_x = round ($origin_x - ($new_width / 2));

            } else {

            $origin_y = $new_height / 2;

            $new_height = $final_height;

            $origin_y = round ($origin_y - ($new_height / 2));

          }

        }

        // Restore transparency blending

        imagesavealpha ($canvas, true);

        if ($zoom_crop > 0) {

            $src_x = $src_y = 0;

            $src_w = $width;

            $src_h = $height;

            $cmp_x = $width / $new_width;

            $cmp_y = $height / $new_height;

            // calculate x or y coordinate and width or height of source

            if ($cmp_x > $cmp_y) {

        $src_w = round ($width / $cmp_x * $cmp_y);

        $src_x = round (($width - ($width / $cmp_x * $cmp_y)) / 2);

            } else if ($cmp_y > $cmp_x) {

        $src_h = round ($height / $cmp_y * $cmp_x);

        $src_y = round (($height - ($height / $cmp_y * $cmp_x)) / 2);

            }

            // positional cropping!

        if ($align) {

            if (strpos ($align, &#39;t&#39;) !== false) {

                $src_y = 0;

            }

                        if (strpos ($align, &#39;b&#39;) !== false) {

                                $src_y = $height - $src_h;

                        }

                        if (strpos ($align, &#39;l&#39;) !== false) {

                $src_x = 0;

            }

            if (strpos ($align, &#39;r&#39;) !== false) {

                $src_x = $width - $src_w;

            }

        }

            // positional cropping!

            imagecopyresampled ($canvas, $image, $origin_x, $origin_y, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h);

         } else {     

        imagecopyresampled ($canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    }

        //Straight from Wordpress core code. Reduces filesize by up to 70% for PNG&#39;s

        if ( (IMAGETYPE_PNG == $image_info[2] || IMAGETYPE_GIF == $image_info[2]) && function_exists(&#39;imageistruecolor&#39;) && !imageistruecolor( $image ) && imagecolortransparent( $image ) > 0 ){

            imagetruecolortopalette( $canvas, false, imagecolorstotal( $image ) );

    }

        $quality = 100;          

        $nameOfFile = &#39;resize_&#39;.$new_width.&#39;x&#39;.$new_height.&#39;_&#39;.basename($file[&#39;name&#39;]);     

    if (preg_match(&#39;/^image\/(?:jpg|jpeg)$/i&#39;, $image_info[&#39;mime&#39;])){                     

        imagejpeg($canvas, $path.$nameOfFile, $quality);

    } else if (preg_match(&#39;/^image\/png$/i&#39;, $image_info[&#39;mime&#39;])){                       

        imagepng($canvas, $path.$nameOfFile, floor($quality * 0.09));

    } else if (preg_match(&#39;/^image\/gif$/i&#39;, $image_info[&#39;mime&#39;])){             

        imagegif($canvas, $path.$nameOfFile);

    }

}

Copy after login

The above is the detailed content of Detailed explanation of image resize function in PHP to adjust image size. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
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