PHP转换图片为ico格式源码
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>
展示效果
源码地址
ico在线转换工具已经集成到了开源项目 https://github.com/diandianxiyu/ApiTesting 中 ,在线demo地址稍后再放出
2016年新年快乐!
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了PHP转换图片为ico格式源码,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.

1. Présentation des fonctions La notification Keyspace permet aux clients de recevoir des événements qui modifient les modifications Rediskey d'une manière ou d'une autre en s'abonnant à des canaux ou à des modèles. Toutes les commandes qui modifient les touches clés. Toutes les clés qui ont reçu la commande LPUSHkeyvalue[value…]. Toutes les clés expirées dans la base de données. Les événements sont distribués via les fonctions d'abonnement et de publication de Redis (pub/sub), de sorte que tous les clients prenant en charge les fonctions d'abonnement et de publication peuvent utiliser directement la fonction de notification de l'espace de clé sans aucune modification. Parce que les fonctions actuelles d'abonnement et de publication de Redis adoptent une stratégie fireandforget, si votre programme

Cet article présente sept façons d'obtenir une sortie de haute qualité à l'aide du logiciel gratuit BingImageCreator. BingImageCreator (maintenant connu sous le nom d'ImageCreator pour Microsoft Designer) est l'un des grands générateurs d'art d'intelligence artificielle en ligne. Il génère des effets visuels très réalistes basés sur les invites de l'utilisateur. Plus vos invites sont spécifiques, claires et créatives, meilleurs seront les résultats. BingImageCreator a fait des progrès significatifs dans la création d'images de haute qualité. Il utilise désormais le mode d'entraînement Dall-E3, affichant un niveau de détail et de réalisme plus élevé. Cependant, sa capacité à produire des résultats HD de manière cohérente dépend de plusieurs facteurs, notamment la rapidité

Problèmes rencontrés : Au cours du processus de développement, vous rencontrerez des clés qui doivent être supprimées par lots selon certaines règles, telles que login_logID (l'ID est une variable). Vous devez maintenant supprimer des données telles que "login_log*", mais se redis. n'a qu'une requête par lots pour les valeurs de clé de classe, mais il n'y a pas de commande pour la suppression par lots d'une certaine classe. Solution : interrogez d'abord, puis supprimez, utilisez xargs pour transmettre les paramètres (xargs peut convertir les données de canal ou d'entrée standard (stdin) en paramètres de ligne de commande), exécutez d'abord l'instruction de requête, puis supprimez la valeur de clé interrogée et les paramètres del d'origine. supprimer. redis-cliKEYSkey* (condition de recherche)|xargsr

Une vulnérabilité de clé d'authentification à deux facteurs Yubico non corrigible a brisé la sécurité de la plupart des appareils Yubikey 5, Security Key et YubiHSM 2FA. La JavaCard Feitian A22 et d'autres appareils utilisant les TPM de la série Infineon SLB96xx sont également vulnérables.

Comment supprimer des images sur les téléphones mobiles Xiaomi ? Vous pouvez supprimer des images sur les téléphones mobiles Xiaomi, mais la plupart des utilisateurs ne savent pas comment supprimer des images. Voici ensuite le didacticiel sur la façon de supprimer des images sur les téléphones mobiles Xiaomi proposé par l'éditeur. pouvez venir nous rejoindre. Voyons! Comment supprimer des images sur le téléphone mobile Xiaomi 1. Ouvrez d'abord la fonction [Album] dans le téléphone mobile Xiaomi ; 2. Vérifiez ensuite les images inutiles et cliquez sur le bouton [Supprimer] dans le coin inférieur droit ; en haut pour accéder à la zone spéciale, sélectionnez [Corbeille] ; 4. Cliquez ensuite directement sur [Vider la corbeille] comme indiqué dans la figure ci-dessous. 5. Enfin, cliquez directement sur [Suppression permanente] pour terminer.

Titre : Exemple d'utilisation de la fonction Array.Sort pour trier un tableau en C# Texte : En C#, un tableau est une structure de données couramment utilisée, et il est souvent nécessaire de trier le tableau. C# fournit la classe Array, qui possède la méthode Sort pour trier facilement les tableaux. Cet article explique comment utiliser la fonction Array.Sort en C# pour trier un tableau et fournit des exemples de code spécifiques. Tout d’abord, nous devons comprendre l’utilisation de base de la fonction Array.Sort. Tableau.Donc

LINUX est un système d'exploitation open source. Sa flexibilité et sa personnalisation en font le premier choix de nombreux développeurs et administrateurs système. Dans le système LINUX, le traitement d'image est une tâche très importante, et Imagemagick et Image sont deux outils de traitement d'image très populaires. L'article vous expliquera comment installer Imagemagick et Image dans le système Centos et fournira des didacticiels d'installation détaillés. Installation d'Imagemagic Tutoriel Centos Imagemagick est un puissant ensemble d'outils de traitement d'image, qui peut effectuer diverses opérations sur les images sous la ligne de commande. Voici les étapes pour installer Imagemagick sur le système Centos : 1.
