0

0

PHP转换图片为ico格式的源码分享

黄舟

黄舟

发布时间:2017-03-11 09:38:47

|

2640人浏览过

|

来源于php中文网

原创

Class

 $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] = '';
            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['alpha']) / 127));                    
                $r = $argb['red'];                    
                $g = $argb['green'];                    
                $b = $argb['blue'];
                    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] .= '1';
                    } else {
                        @$icANDmask[$key][$y] .= '0';
                    }
                }
                while (strlen($icANDmask[$key][$y]) % 32) {                    
                $icANDmask[$key][$y] .= '0';
                }
            }            $icAND[$key] = '';
            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, '0', STR_PAD_LEFT)));
                }
            }
        }
        foreach ($gd_ico_array as $key => $gd_image) {            
        $biSizeImage = $IcoWidths[$key] * $IcoHeights[$key] * ($bpp[$key] / 8);            
        $bfh[$key]  = '';            
        $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 = '';
        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));
    }
}
?>

Controller

if ( $error['text'] == "" && isset($_FILES['upimage']['tmp_name']) && $_FILES['upimage']['tmp_name'] && is_uploaded_file($_FILES['upimage']['tmp_name'])) {
                if ($_FILES['upimage']['type'] > 210000) {
                    $error['text'] = "你上传的文件体积超过了限制 最大不能超过200k";
                } else {
                    $fileext = array("image/pjpeg", "image/gif", "image/x-png", "image/png", "image/jpeg", "image/jpg");
                    if (!in_array($_FILES['upimage']['type'], $fileext)) {
                        $error['text'] = "你上传的文件格式不正确 仅支持 jpg,gif,png";
                    }else {
                        if ($im = @imagecreatefrompng($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromgif($_FILES['upimage']['tmp_name']) 
                        or $im = @imagecreatefromjpeg($_FILES['upimage']['tmp_name'])) {
                            $imginfo = @getimagesize($_FILES['upimage']['tmp_name']);
                            if (!is_array($imginfo)) {
                                $error['text'] = "图形格式错误!";
                            }else {
                                switch ($_POST['size']) {
                                    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 = "生成成功!请点右键->另存为 保存到本地
点击下载"; // echo $filename; //数据展示 $icon_arr=[ 'class'=>'', 'time'=>date("Y-m-d H:i:s"), 'filename'=>$_FILES['upimage']['name'], 'filepath'=>$filename, 'size'=>$size ]; } } } else { $error['text'] = "生成错误请重试"; } } } }else{ $error['text'] = "请选择图片!"; }

展示效果

这里写图片描述

wordpress图片展示类主题
wordpress图片展示类主题

这是易秀购主题网分享的一款展示为图片类的类的wordpress主题,WP主题熟悉的朋友应该一眼能看出这是瀑布流修改优化而来。主题并且采用了Ajax加载技术,主题代码非常精简,加载速度非常快。这款图片类主题格式化了几个自定义栏目,分别是price(价格)、from(购买自…)、ob-url(单品url)、shop-url(店铺url)和banner(文章详细页面上部的图片,如果

下载

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号