Maison > développement back-end > tutoriel php > Partage de code source pour convertir des images au format ico à l'aide de PHP

Partage de code source pour convertir des images au format ico à l'aide de PHP

黄舟
Libérer: 2023-03-06 14:12:01
original
2507 Les gens l'ont consulté

Classe

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

<?php

namespace  App\Libs;

 

class Iconv {

    function phpmake_ico() {

        return true;

    }

    function GDtoICOstr(&$gd_ico_array) {

        foreach ($gd_ico_array as $key => $gd_image) {           

        $IcoWidths[$key]  = ImageSX($gd_image);           

        $IcoHeights[$key] = ImageSY($gd_image);           

        $bpp[$key]          = ImageIsTrueColor($gd_image) ? 32 : 24;           

        $totalcolors[$key]  = ImageColorsTotal($gd_image);           

        $icXOR[$key] = &#39;&#39;;

            for ($y = $IcoHeights[$key] - 1; $y >= 0; $y--) {

                for ($x = 0; $x < $IcoWidths[$key]; $x++) {                   

                $argb = $this->gpc($gd_image, $x, $y);                   

                $a = round(255 * ((127 - $argb[&#39;alpha&#39;]) / 127));                   

                $r = $argb[&#39;red&#39;];                   

                $g = $argb[&#39;green&#39;];                   

                $b = $argb[&#39;blue&#39;];

                    if ($bpp[$key] == 32) {                       

                    $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);

                    } elseif ($bpp[$key] == 24) {                       

                    $icXOR[$key] .= chr($b).chr($g).chr($r);

                    }

                    if ($a < 128) {

                        @$icANDmask[$key][$y] .= &#39;1&#39;;

                    } else {

                        @$icANDmask[$key][$y] .= &#39;0&#39;;

                    }

                }

                while (strlen($icANDmask[$key][$y]) % 32) {                   

                $icANDmask[$key][$y] .= &#39;0&#39;;

                }

            }            $icAND[$key] = &#39;&#39;;

            foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {

                for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {                   

                $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, &#39;0&#39;, STR_PAD_LEFT)));

                }

            }

        }

        foreach ($gd_ico_array as $key => $gd_image) {           

        $biSizeImage = $IcoWidths[$key] * $IcoHeights[$key] * ($bpp[$key] / 8);           

        $bfh[$key]  = &#39;&#39;;           

        $bfh[$key] .= "\x28\x00\x00\x00";           

        $bfh[$key] .= $this->le2s($IcoWidths[$key], 4);           

        $bfh[$key] .= $this->le2s($IcoHeights[$key] * 2, 4);           

        $bfh[$key] .= "\x01\x00";           

        $bfh[$key] .= chr($bpp[$key])."\x00";           

        $bfh[$key] .= "\x00\x00\x00\x00";           

        $bfh[$key] .= $this->le2s($biSizeImage, 4);           

        $bfh[$key] .= "\x00\x00\x00\x00";           

        $bfh[$key] .= "\x00\x00\x00\x00";           

        $bfh[$key] .= "\x00\x00\x00\x00";           

        $bfh[$key] .= "\x00\x00\x00\x00";

        }       

        $icondata  = "\x00\x00";       

        $icondata .= "\x01\x00";       

        $icondata .= $this->le2s(count($gd_ico_array), 2);       

        $dwImageOffset = 6 + (count($gd_ico_array) * 16);

        foreach ($gd_ico_array as $key => $gd_image) {           

        $icondata .= chr($IcoWidths[$key]);           

        $icondata .= chr($IcoHeights[$key]);           

        $icondata .= chr($totalcolors[$key]);           

        $icondata .= "\x00";           

        $icondata .= "\x01\x00";           

        $icondata .= chr($bpp[$key])."\x00";           

        $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);           

        $icondata .= $this->le2s($dwBytesInRes, 4);           

        $icondata .= $this->le2s($dwImageOffset, 4);           

        $dwImageOffset += strlen($bfh[$key]);           

        $dwImageOffset += strlen($icXOR[$key]);           

        $dwImageOffset += strlen($icAND[$key]);

        }

        foreach ($gd_ico_array as $key => $gd_image) {           

        $icondata .= $bfh[$key];           

        $icondata .= $icXOR[$key];           

        $icondata .= $icAND[$key];

        }

        return $icondata;

    }

    function le2s($number, $minbytes=1) {       

    $intstring = &#39;&#39;;

        while ($number > 0) {           

        $intstring = $intstring.chr($number & 255);           

        $number >>= 8;

        }

        return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);

    }

    function gpc(&$img, $x, $y) {

        if (!is_resource($img)) {

            return false;

        }

        return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));

    }

}

?>

Copier après la connexion

Contrôleur

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

if ( $error[&#39;text&#39;] == "" && isset($_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;]) && $_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;] && is_uploaded_file($_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;])) {

                if ($_FILES[&#39;upimage&#39;][&#39;type&#39;] > 210000) {

                    $error[&#39;text&#39;] = "你上传的文件体积超过了限制 最大不能超过200k";

                } else {

                    $fileext = array("image/pjpeg", "image/gif", "image/x-png", "image/png", "image/jpeg", "image/jpg");

                    if (!in_array($_FILES[&#39;upimage&#39;][&#39;type&#39;], $fileext)) {

                        $error[&#39;text&#39;] = "你上传的文件格式不正确 仅支持 jpg,gif,png";

                    }else {

                        if ($im = @imagecreatefrompng($_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;]) or $im = @imagecreatefromgif($_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;])

                        or $im = @imagecreatefromjpeg($_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;])) {

                            $imginfo = @getimagesize($_FILES[&#39;upimage&#39;][&#39;tmp_name&#39;]);

                            if (!is_array($imginfo)) {

                                $error[&#39;text&#39;] = "图形格式错误!";

                            }else {

                                switch ($_POST[&#39;size&#39;]) {

                                    case 1;

                                        $resize_im = @imagecreatetruecolor(16, 16);

                                        $size = 16;

                                        break;

                                    case 2;

                                        $resize_im = @imagecreatetruecolor(32, 32);

                                        $size = 32;

                                        break;

                                    case 3;

                                        $resize_im = @imagecreatetruecolor(48, 48);

                                        $size = 48;

                                        break;

                                    case 4;

                                        $resize_im = @imagecreatetruecolor(64, 64);

                                        $size = 64;

                                        break;

                                    case 5;

                                        $resize_im = @imagecreatetruecolor(128, 128);

                                        $size = 128;

                                        break;

                                    default;

                                        $resize_im = @imagecreatetruecolor(64, 64);

                                        $size = 64;

                                        break;

                                }

                                imagecopyresampled($resize_im, $im, 0, 0, 0, 0, $size, $size, $imginfo[0], $imginfo[1]);

 

                                $icon = new Iconv();

 

                                $gd_image_array = array($resize_im);

                                $icon_data = $icon->GDtoICOstr($gd_image_array);

                                $filename = "temp/" . date("Ymdhis") . rand(1, 1000) . ".ico";

                                if (file_put_contents($filename, $icon_data)) {

//                            $output = "生成成功!请点右键->另存为 保存到本地<br><a href="/" mce_href="/""".$filename."/" target=/"_blank/">点击下载</a>";

//                                    echo $filename;

                                    //数据展示

                                    $icon_arr=[

                                        &#39;class&#39;=>&#39;&#39;,

                                        &#39;time&#39;=>date("Y-m-d H:i:s"),

                                        &#39;filename&#39;=>$_FILES[&#39;upimage&#39;][&#39;name&#39;],

                                        &#39;filepath&#39;=>$filename,

                                        &#39;size&#39;=>$size

                                    ];

                                }

                            }

                        } else {

                                $error[&#39;text&#39;] = "生成错误请重试";

 

                        }

                    }

                }

            }else{

                $error[&#39;text&#39;] = "请选择图片!";

            }

Copier après la connexion

Afficher l'effet

Partage de code source pour convertir des images au format ico à laide de PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal