首頁 後端開發 php教程 PHP轉換圖片為ico格式原始碼

PHP轉換圖片為ico格式原始碼

Jul 29, 2016 am 09:08 AM
array image key

Class

<code><span><span><span><span><span><span><span><span><span><span><span><span><span><?php namespace  App\Libs;

class Iconv {
    function phpmake_ico<span>()</span> {
        return true;
    }
    function GDtoICOstr<span>(&<span>$gd_ico_array</span>)</span> {
        foreach <span>(<span>$gd_ico_array</span> as <span>$key</span> => <span>$gd_image</span>)</span> {
            <span>$IcoWidths</span>[<span>$key</span>]  = ImageSX<span>(<span>$gd_image</span>)</span>;
            <span>$IcoHeights</span>[<span>$key</span>] = ImageSY<span>(<span>$gd_image</span>)</span>;
            <span>$bpp</span>[<span>$key</span>]          = ImageIsTrueColor<span>(<span>$gd_image</span>)</span> ? <span>32</span> : <span>24</span>;
            <span>$totalcolors</span>[<span>$key</span>]  = ImageColorsTotal<span>(<span>$gd_image</span>)</span>;
            <span>$icXOR</span>[<span>$key</span>] = <span>''</span>;
            for <span>(<span>$y</span> = <span>$IcoHeights</span>[<span>$key</span>] - <span>1</span>; <span>$y</span> >= <span>0</span>; <span>$y</span>--)</span> {
                for <span>(<span>$x</span> = <span>0</span>; <span>$x</span> $IcoWidths</span>[<span>$key</span>]; <span>$x</span>++)</span> {
                    <span>$argb</span> = <span>$this</span>->gpc<span>(<span>$gd_image</span>, <span>$x</span>, <span>$y</span>)</span>;
                    <span>$a</span> = round<span>(<span>255</span> * <span>(<span>(<span>127</span> - <span>$argb</span>[<span>'alpha'</span>])</span> / <span>127</span>)</span>)</span>;
                    <span>$r</span> = <span>$argb</span>[<span>'red'</span>];
                    <span>$g</span> = <span>$argb</span>[<span>'green'</span>];
                    <span>$b</span> = <span>$argb</span>[<span>'blue'</span>];
                    if <span>(<span>$bpp</span>[<span>$key</span>] == <span>32</span>)</span> {
                        <span>$icXOR</span>[<span>$key</span>] .= chr<span>(<span>$b</span>)</span>.chr<span>(<span>$g</span>)</span>.chr<span>(<span>$r</span>)</span>.chr<span>(<span>$a</span>)</span>;
                    } elseif <span>(<span>$bpp</span>[<span>$key</span>] == <span>24</span>)</span> {
                        <span>$icXOR</span>[<span>$key</span>] .= chr<span>(<span>$b</span>)</span>.chr<span>(<span>$g</span>)</span>.chr<span>(<span>$r</span>)</span>;
                    }
                    if <span>(<span>$a</span> 128</span>)</span> {
                        @<span>$icANDmask</span>[<span>$key</span>][<span>$y</span>] .= <span>'1'</span>;
                    } else {
                        @<span>$icANDmask</span>[<span>$key</span>][<span>$y</span>] .= <span>'0'</span>;
                    }
                }
                while <span>(strlen<span>(<span>$icANDmask</span>[<span>$key</span>][<span>$y</span>])</span> % <span>32</span>)</span> {
                    <span>$icANDmask</span>[<span>$key</span>][<span>$y</span>] .= <span>'0'</span>;
                }
            }
            <span>$icAND</span>[<span>$key</span>] = <span>''</span>;
            foreach <span>(<span>$icANDmask</span>[<span>$key</span>] as <span>$y</span> => <span>$scanlinemaskbits</span>)</span> {
                for <span>(<span>$i</span> = <span>0</span>; <span>$i</span> (<span>$scanlinemaskbits</span>)</span>; <span>$i</span> += <span>8</span>)</span> {
                    <span>$icAND</span>[<span>$key</span>] .= chr<span>(bindec<span>(str_pad<span>(substr<span>(<span>$scanlinemaskbits</span>, <span>$i</span>, <span>8</span>)</span>, <span>8</span>, <span>'0'</span>, STR_PAD_LEFT)</span>)</span>)</span>;
                }
            }
        }
        foreach <span>(<span>$gd_ico_array</span> as <span>$key</span> => <span>$gd_image</span>)</span> {
            <span>$biSizeImage</span> = <span>$IcoWidths</span>[<span>$key</span>] * <span>$IcoHeights</span>[<span>$key</span>] * <span>(<span>$bpp</span>[<span>$key</span>] / <span>8</span>)</span>;
            <span>$bfh</span>[<span>$key</span>]  = <span>''</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x28\x00\x00\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>$this</span>->le2s<span>(<span>$IcoWidths</span>[<span>$key</span>], <span>4</span>)</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>$this</span>->le2s<span>(<span>$IcoHeights</span>[<span>$key</span>] * <span>2</span>, <span>4</span>)</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x01\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= chr<span>(<span>$bpp</span>[<span>$key</span>])</span>.<span>"\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x00\x00\x00\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>$this</span>->le2s<span>(<span>$biSizeImage</span>, <span>4</span>)</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x00\x00\x00\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x00\x00\x00\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x00\x00\x00\x00"</span>;
            <span>$bfh</span>[<span>$key</span>] .= <span>"\x00\x00\x00\x00"</span>;
        }
        <span>$icondata</span>  = <span>"\x00\x00"</span>;
        <span>$icondata</span> .= <span>"\x01\x00"</span>;
        <span>$icondata</span> .= <span>$this</span>->le2s<span>(count<span>(<span>$gd_ico_array</span>)</span>, <span>2</span>)</span>;
        <span>$dwImageOffset</span> = <span>6</span> + <span>(count<span>(<span>$gd_ico_array</span>)</span> * <span>16</span>)</span>;
        foreach <span>(<span>$gd_ico_array</span> as <span>$key</span> => <span>$gd_image</span>)</span> {
            <span>$icondata</span> .= chr<span>(<span>$IcoWidths</span>[<span>$key</span>])</span>;
            <span>$icondata</span> .= chr<span>(<span>$IcoHeights</span>[<span>$key</span>])</span>;
            <span>$icondata</span> .= chr<span>(<span>$totalcolors</span>[<span>$key</span>])</span>;
            <span>$icondata</span> .= <span>"\x00"</span>;
            <span>$icondata</span> .= <span>"\x01\x00"</span>;
            <span>$icondata</span> .= chr<span>(<span>$bpp</span>[<span>$key</span>])</span>.<span>"\x00"</span>;
            <span>$dwBytesInRes</span> = <span>40</span> + strlen<span>(<span>$icXOR</span>[<span>$key</span>])</span> + strlen<span>(<span>$icAND</span>[<span>$key</span>])</span>;
            <span>$icondata</span> .= <span>$this</span>->le2s<span>(<span>$dwBytesInRes</span>, <span>4</span>)</span>;
            <span>$icondata</span> .= <span>$this</span>->le2s<span>(<span>$dwImageOffset</span>, <span>4</span>)</span>;
            <span>$dwImageOffset</span> += strlen<span>(<span>$bfh</span>[<span>$key</span>])</span>;
            <span>$dwImageOffset</span> += strlen<span>(<span>$icXOR</span>[<span>$key</span>])</span>;
            <span>$dwImageOffset</span> += strlen<span>(<span>$icAND</span>[<span>$key</span>])</span>;
        }
        foreach <span>(<span>$gd_ico_array</span> as <span>$key</span> => <span>$gd_image</span>)</span> {
            <span>$icondata</span> .= <span>$bfh</span>[<span>$key</span>];
            <span>$icondata</span> .= <span>$icXOR</span>[<span>$key</span>];
            <span>$icondata</span> .= <span>$icAND</span>[<span>$key</span>];
        }
        return <span>$icondata</span>;
    }
    function le2s<span>(<span>$number</span>, <span>$minbytes</span>=<span>1</span>)</span> {
        <span>$intstring</span> = <span>''</span>;
        while <span>(<span>$number</span> > <span>0</span>)</span> {
            <span>$intstring</span> = <span>$intstring</span>.chr<span>(<span>$number</span> & <span>255</span>)</span>;
            <span>$number</span> >>= <span>8</span>;
        }
        return str_pad<span>(<span>$intstring</span>, <span>$minbytes</span>, <span>"\x00"</span>, STR_PAD_RIGHT)</span>;
    }
    function gpc<span>(&<span>$img</span>, <span>$x</span>, <span>$y</span>)</span> {
        if <span>(!is_resource<span>(<span>$img</span>)</span>)</span> {
            return false;
        }
        return @ImageColorsForIndex<span>(<span>$img</span>, @ImageColorAt<span>(<span>$img</span>, <span>$x</span>, <span>$y</span>)</span>)</span>;
    }
}
?></span></span></span></span></span></span></span></span></span></code>
登入後複製

Controller

<code><span>if</span> ( <span>$error</span>[<span>'text'</span>] == <span>""</span> && isset(<span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>]) && <span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>] && is_uploaded_file(<span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>])) {
                <span>if</span> (<span>$_FILES</span>[<span>'upimage'</span>][<span>'type'</span>] > <span>210000</span>) {
                    <span>$error</span>[<span>'text'</span>] = <span>"你上传的文件体积超过了限制 最大不能超过200k"</span>;
                } <span>else</span> {
                    <span>$fileext</span> = array(<span>"image/pjpeg"</span>, <span>"image/gif"</span>, <span>"image/x-png"</span>, <span>"image/png"</span>, <span>"image/jpeg"</span>, <span>"image/jpg"</span>);
                    <span>if</span> (!in_array(<span>$_FILES</span>[<span>'upimage'</span>][<span>'type'</span>], <span>$fileext</span>)) {
                        <span>$error</span>[<span>'text'</span>] = <span>"你上传的文件格式不正确 仅支持 jpg,gif,png"</span>;
                    }<span>else</span> {
                        <span>if</span> (<span>$im</span> = <span>@imagecreatefrompng</span>(<span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>]) <span>or</span><span>$im</span> = <span>@imagecreatefromgif</span>(<span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>]) <span>or</span><span>$im</span> = <span>@imagecreatefromjpeg</span>(<span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>])) {
                            <span>$imginfo</span> = <span>@getimagesize</span>(<span>$_FILES</span>[<span>'upimage'</span>][<span>'tmp_name'</span>]);
                            <span>if</span> (!is_array(<span>$imginfo</span>)) {
                                <span>$error</span>[<span>'text'</span>] = <span>"图形格式错误!"</span>;
                            }<span>else</span> {
                                switch (<span>$_POST</span>[<span>'size'</span>]) {
                                    <span>case</span><span>1</span>;
                                        <span>$resize_im</span> = <span>@imagecreatetruecolor</span>(<span>16</span>, <span>16</span>);
                                        <span>$size</span> = <span>16</span>;
                                        <span>break</span>;
                                    <span>case</span><span>2</span>;
                                        <span>$resize_im</span> = <span>@imagecreatetruecolor</span>(<span>32</span>, <span>32</span>);
                                        <span>$size</span> = <span>32</span>;
                                        <span>break</span>;
                                    <span>case</span><span>3</span>;
                                        <span>$resize_im</span> = <span>@imagecreatetruecolor</span>(<span>48</span>, <span>48</span>);
                                        <span>$size</span> = <span>48</span>;
                                        <span>break</span>;
                                    <span>case</span><span>4</span>;
                                        <span>$resize_im</span> = <span>@imagecreatetruecolor</span>(<span>64</span>, <span>64</span>);
                                        <span>$size</span> = <span>64</span>;
                                        <span>break</span>;
                                    <span>case</span><span>5</span>;
                                        <span>$resize_im</span> = <span>@imagecreatetruecolor</span>(<span>128</span>, <span>128</span>);
                                        <span>$size</span> = <span>128</span>;
                                        <span>break</span>;
                                    default;
                                        <span>$resize_im</span> = <span>@imagecreatetruecolor</span>(<span>64</span>, <span>64</span>);
                                        <span>$size</span> = <span>64</span>;
                                        <span>break</span>;
                                }
                                imagecopyresampled(<span>$resize_im</span>, <span>$im</span>, <span>0</span>, <span>0</span>, <span>0</span>, <span>0</span>, <span>$size</span>, <span>$size</span>, <span>$imginfo</span>[<span>0</span>], <span>$imginfo</span>[<span>1</span>]);

                                <span>$icon</span> = new <span>Iconv</span>();

                                <span>$gd_image_array</span> = array(<span>$resize_im</span>);
                                <span>$icon_data</span> = <span>$icon</span>-><span>GDtoICOstr</span>(<span>$gd_image_array</span>);
                                <span>$filename</span> = <span>"temp/"</span> . date(<span>"Ymdhis"</span>) . rand(<span>1</span>, <span>1000</span>) . <span>".ico"</span>;
                                <span>if</span> (file_put_contents(<span>$filename</span>, <span>$icon_data</span>)) {
<span>//</span><span>$output</span> = <span>"生成成功!请点右键->另存为 保存到本地<br><a href="</span>/<span>" mce_href="</span>/<span>"><span>".$filename."</span>/<span>" target=/"</span>_blank/<span>">点击下载</span></a>"</span>;
<span>//</span>                                    echo <span>$filename</span>;
                                    <span>//</span>数据展示
                                    <span>$icon_arr</span>=[
                                        <span>'class'</span>=><span>''</span>,
                                        <span>'time'</span>=>date(<span>"Y-m-d H:i:s"</span>),
                                        <span>'filename'</span>=><span>$_FILES</span>[<span>'upimage'</span>][<span>'name'</span>],
                                        <span>'filepath'</span>=><span>$filename</span>,
                                        <span>'size'</span>=><span>$size</span>
                                    ];
                                }
                            }
                        } <span>else</span> {
                                <span>$error</span>[<span>'text'</span>] = <span>"生成错误请重试"</span>;

                        }
                    }
                }
            }<span>else</span>{
                <span>$error</span>[<span>'text'</span>] = <span>"请选择图片!"</span>;
            }

</code>
登入後複製

展示效果

PHP轉換圖片為ico格式原始碼

源碼地址

ico線上轉換工具已經整合到了開源專案https://github.com

2016年新年快樂!

')​​.addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了PHP轉換圖片為ico格式原始碼,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SQL中的identity屬性是什麼意思? SQL中的identity屬性是什麼意思? Feb 19, 2024 am 11:24 AM

SQL中的Identity是什麼,需要具體程式碼範例在SQL中,Identity是一種用於產生自增數字的特殊資料類型,它常用於唯一識別表中的每一行資料。 Identity欄位通常與主鍵列搭配使用,可確保每筆記錄都有獨一無二的識別碼。本文將詳細介紹Identity的使用方式以及一些實際的程式碼範例。 Identity的基本使用方式在建立表格時,可以使用Identit

SpringBoot怎麼監聽redis Key變化事件 SpringBoot怎麼監聽redis Key變化事件 May 26, 2023 pm 01:55 PM

一、功能概覽鍵空間通知使得客戶端可以透過訂閱頻道或模式,來接收那些以某種方式改變了Rediskey變化的事件。所有修改key鍵的指令。所有接收到LPUSHkeyvalue[value…]指令的鍵。 db資料庫中所有已過期的鍵。活動透過Redis的訂閱與發布功能(pub/sub)來分發,因此所有支援訂閱與發布功能的用戶端都可以在無須做任何修改的情況下,直接使用按鍵空間通知功能。因為Redis目前的訂閱與發布功能採取的是發送即忘(fireandforget)策略,所以如果你的程

如何免費使用Bing Image Creator 如何免費使用Bing Image Creator Feb 27, 2024 am 11:04 AM

本文將介紹七種利用免費的BingImageCreator獲得高品質輸出的方法。 BingImageCreator(現稱為MicrosoftDesigner的ImageCreator)是一個出色的線上人工智慧藝術生成器之一。它能根據使用者的提示產生高度逼真的視覺效果。提示越具體、清晰和創意,生成的效果也會更出色。 BingImageCreator在創建高品質影像方面取得了重大進展。現在它使用Dall-E3訓練模式,顯示出更高水準的細節和現實主義。然而,它能否始終如一地產生高清結果取決於幾個因素,包括快速

不可修補的 Yubico 二因素驗證金鑰漏洞破壞了大多數 Yubikey 5、安全金鑰和 YubiHSM 2FA 設備的安全性 不可修補的 Yubico 二因素驗證金鑰漏洞破壞了大多數 Yubikey 5、安全金鑰和 YubiHSM 2FA 設備的安全性 Sep 04, 2024 pm 06:32 PM

無法修補的 Yubico 二因素驗證金鑰漏洞已經破壞了大多數 Yubikey 5、安全金鑰和 YubiHSM 2FA 設備的安全性。 Feitian A22 JavaCard和其他使用Infineon SLB96xx系列TPM的裝置也容易受到攻擊。

redis批量刪除key值的問題怎麼解決 redis批量刪除key值的問題怎麼解決 May 31, 2023 am 08:59 AM

遇到的問題:在開發過程中,會遇到要批量刪除某種規則的key,例如login_logID(ID為變數),現在需要刪除"login_log*"這一類的數據,但是redis本身只有批量查詢一類別key值的指令keys,但是沒有批次刪除某一個類別的指令。解決方法:先查詢,在刪除,使用xargs傳參(xargs可以將管道或標準輸入(stdin)資料轉換成命令列參數),先執行查詢語句,在將查詢出來的key值,當初del的參數去刪除。 redis-cliKEYSkey*(查找條件)|xargsr

小米手機image怎麼刪除 小米手機image怎麼刪除 Mar 02, 2024 pm 05:34 PM

小米手機image怎麼刪除?在小米手機中是可以刪除image,但是多數的用戶不知道image如何的刪除,接下來就是小編為用戶帶來的小米手機image刪除方法教程,感興趣的用戶快來一起看看吧!小米手機image怎麼刪除1、先打開小米手機中的【相簿】功能;2、然後勾選不需要的圖片,點擊右下角的【刪除】按鈕;3、之後點擊最頂部的【相簿】進入到專區,選擇【回收站】;4、接著直接點選下圖所示的【清空回收站】;5、最後直接點選【永久刪除】即可完成。

使用C#中的Array.Sort函數對陣列進行排序 使用C#中的Array.Sort函數對陣列進行排序 Nov 18, 2023 am 10:37 AM

標題:C#中使用Array.Sort函數對陣列進行排序的範例正文:在C#中,陣列是一種常用的資料結構,經常需要對陣列進行排序運算。 C#提供了Array類,其中有Sort方法可以方便地對陣列進行排序。本文將示範如何使用C#中的Array.Sort函數對陣列進行排序,並提供具體的程式碼範例。首先,我們要先了解Array.Sort函數的基本用法。 Array.So

Imagemagic安裝Centos及Image安裝教學課程 Imagemagic安裝Centos及Image安裝教學課程 Feb 12, 2024 pm 05:27 PM

LINUX是一種開源的作業系統,它的靈活性和可自訂性使得它成為了許多開發者和系統管理員的首選,在LINUX系統中,映像處理是一個非常重要的任務,而Imagemagick和Image是兩個非常受歡迎的影像處理工具,本文將為您介紹如何在Centos系統中安裝Imagemagick和Image,並提供詳細的安裝教學。 Imagemagic安裝Centos教學Imagemagick是一個功能強大的影像處理工具集,它可以在命令列下執行各種映像操作,以下是在Centos系統上安裝Imagemagick的步驟:1

See all articles