0

0

PHP仿GD生成BMP图片

php中文网

php中文网

发布时间:2016-07-25 09:02:10

|

1388人浏览过

|

来源于php中文网

原创

PHP仿GD生成BMP图片
  1. function imagebmp(&$im, $filename = '', $bit = 8, $compression = 0)
  2. {
  3. if (!in_array($bit, array(1, 4, 8, 16, 24, 32)))
  4. {
  5. $bit = 8;
  6. }
  7. else if ($bit == 32) // todo:32 bit
  8. {
  9. $bit = 24;
  10. }
  11. $bits = pow(2, $bit);
  12. // 调整调色板
  13. imagetruecolortopalette($im, true, $bits);
  14. $width = imagesx($im);
  15. $height = imagesy($im);
  16. $colors_num = imagecolorstotal($im);
  17. if ($bit
  18. {
  19. // 颜色索引
  20. $rgb_quad = '';
  21. for ($i = 0; $i
  22. {
  23. $colors = imagecolorsforindex($im, $i);
  24. $rgb_quad .= chr($colors['blue']) . chr($colors['green']) . chr($colors['red']) . "\0";
  25. }
  26. // 位图数据
  27. $bmp_data = '';
  28. // 非压缩
  29. if ($compression == 0 || $bit
  30. {
  31. if (!in_array($bit, array(1, 4, 8)))
  32. {
  33. $bit = 8;
  34. }
  35. $compression = 0;
  36. // 每行字节数必须为4的倍数,补齐。
  37. $extra = '';
  38. $padding = 4 - ceil($width / (8 / $bit)) % 4;
  39. if ($padding % 4 != 0)
  40. {
  41. $extra = str_repeat("\0", $padding);
  42. }
  43. for ($j = $height - 1; $j >= 0; $j --)
  44. {
  45. $i = 0;
  46. while ($i
  47. {
  48. $bin = 0;
  49. $limit = $width - $i
  50. for ($k = 8 - $bit; $k >= $limit; $k -= $bit)
  51. {
  52. $index = imagecolorat($im, $i, $j);
  53. $bin |= $index
  54. $i ++;
  55. }
  56. $bmp_data .= chr($bin);
  57. }
  58. $bmp_data .= $extra;
  59. }
  60. }
  61. // RLE8 压缩
  62. else if ($compression == 1 && $bit == 8)
  63. {
  64. for ($j = $height - 1; $j >= 0; $j --)
  65. {
  66. $last_index = "\0";
  67. $same_num = 0;
  68. for ($i = 0; $i
  69. {
  70. $index = imagecolorat($im, $i, $j);
  71. if ($index !== $last_index || $same_num > 255)
  72. {
  73. if ($same_num != 0)
  74. {
  75. $bmp_data .= chr($same_num) . chr($last_index);
  76. }
  77. $last_index = $index;
  78. $same_num = 1;
  79. }
  80. else
  81. {
  82. $same_num ++;
  83. }
  84. }
  85. $bmp_data .= "\0\0";
  86. }
  87. $bmp_data .= "\0\1";
  88. }
  89. $size_quad = strlen($rgb_quad);
  90. $size_data = strlen($bmp_data);
  91. }
  92. else
  93. {
  94. // 每行字节数必须为4的倍数,补齐。
  95. $extra = '';
  96. $padding = 4 - ($width * ($bit / 8)) % 4;
  97. if ($padding % 4 != 0)
  98. {
  99. $extra = str_repeat("\0", $padding);
  100. }
  101. // 位图数据
  102. $bmp_data = '';
  103. for ($j = $height - 1; $j >= 0; $j --)
  104. {
  105. for ($i = 0; $i
  106. {
  107. $index = imagecolorat($im, $i, $j);
  108. $colors = imagecolorsforindex($im, $index);
  109. if ($bit == 16)
  110. {
  111. $bin = 0
  112. $bin |= ($colors['red'] >> 3)
  113. $bin |= ($colors['green'] >> 3)
  114. $bin |= $colors['blue'] >> 3;
  115. $bmp_data .= pack("v", $bin);
  116. }
  117. else
  118. {
  119. $bmp_data .= pack("c*", $colors['blue'], $colors['green'], $colors['red']);
  120. }
  121. // todo: 32bit;
  122. }
  123. $bmp_data .= $extra;
  124. }
  125. $size_quad = 0;
  126. $size_data = strlen($bmp_data);
  127. $colors_num = 0;
  128. }
  129. // 位图文件头
  130. $file_header = "BM" . pack("V3", 54 + $size_quad + $size_data, 0, 54 + $size_quad);
  131. // 位图信息头
  132. $info_header = pack("V3v2V*", 0x28, $width, $height, 1, $bit, $compression, $size_data, 0, 0, $colors_num, 0);
  133. // 写入文件
  134. if ($filename != '')
  135. {
  136. $fp = fopen($filename, "wb");
  137. fwrite($fp, $file_header);
  138. fwrite($fp, $info_header);
  139. fwrite($fp, $rgb_quad);
  140. fwrite($fp, $bmp_data);
  141. fclose($fp);
  142. return true;
  143. }
  144. // 浏览器输出
  145. header("Content-Type: image/bmp");
  146. echo $file_header . $info_header;
  147. echo $rgb_quad;
  148. echo $bmp_data;
  149. return true;
  150. }
复制代码


相关文章

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不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

28

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

23

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

27

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

16

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

164

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

309

2026.02.27

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极致CMS零基础建站教学视频
极致CMS零基础建站教学视频

共62课时 | 5.9万人学习

PHP水印与缩略图最新视频教程
PHP水印与缩略图最新视频教程

共10课时 | 1.8万人学习

PHP开发水印与缩略图教程
PHP开发水印与缩略图教程

共10课时 | 4.3万人学习

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

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