您现在的位置是:首页 > 正文

python将图片生成二进制的两种方式(java读取)

2024-04-01 05:55:27阅读 3


以程序中生成的词云图为例(方便测试,我把生成图片调小了)

wc = WordCloud(font_path=font_path, scale=1, collocations=False, background_color='white',
                       width=40, height=30)  # mask=back_coloring
wc.generate_from_frequencies(count_dict)
img = wc.to_image()

获取的img为PIL的Image对象,这里有两种方式生成二进制数据

tobytes()

直接将图片的三维数组转化为二进制

img_bytes = img.tobytes()

python可以很方便的读取生成的二进制数据,需要指定一下模式和size

img = Image.frombytes(mode="RGB",size=(40,30), data=data1[0])

但在java读起来并不方便,我尝试将字节输入流转化为int数组,然后BufferedImage.setRGB()读取,图片可以显示,但是存在一些问题,之前白色的背景变为蓝色,图片内容也有一些改变,开始我以为是python三维数组到一维的方式不同导致的,从(30,40,3)->(3,30,40)发现都不行,java正常从本地读取一个png文件,getRGB获取的数组中的数也看不太懂。这个目前还没有找到解决的方案。

BufferedImage image = new BufferedImage(40,30, BufferedImage.TYPE_INT_RGB);
image.setRGB(0,0,40,30, imgInt,0,40);

不得不说,人生苦短,我用python

生成带格式的二进制

原理就是调用Image的save方法,写入我们的内存中,写入的是压缩形式的二进制,带有格式信息
关于这个其实python没有java那么明确,java中有明确的InputStreamOutputStream,输出流生成时可以写入字节数组,当然python也可以实现把文件写入到字节数组,方法如下

output = BytesIO()
img.save(output, format='png')
hex_data = output.getvalue()

这里获取到的二进制数据java可以方便的读取,因为是带png格式的。

//这里从数据库读取图片的二进制流
BufferedImage image = ImageIO.read(in);
image.getRGB(0,0,40,30,rgbArray,0,40);
System.out.println(Arrays.toString(rgbArray));

via python图像PIL到二进制十六进制(python Image PIL to binary Hex)

网站文章

  • 计算机控制与技术课程设计报告书,计算机控制技术课程设计书报告书.doc

    on二阶环节电压跟踪控制系统的设计(采用PC机、JK实验装置)专 业:自动化 专业班 级:2008 级 8(7)班组 员:姚 亮刘 凤罗 威 李 延 ...

    2024-04-01 05:55:19
  • python优化算法工具包_12种Python 机器学习 & 数据挖掘工具包,一定让你受益匪浅...

    python优化算法工具包_12种Python 机器学习 & 数据挖掘工具包,一定让你受益匪浅...

    作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。...

    2024-04-01 05:55:12
  • 数据挖掘-二手车价格预测 Task01:赛题理解

    数据挖掘-二手车价格预测 Task01:赛题理解

    数据挖掘-二手车价格预测 Task01:赛题理解 1.赛题概况 赛题以预测二手车的交易价格为任务,数据集来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量。为...

    2024-04-01 05:55:05
  • 美国计算机加音乐专业,卡内基梅隆大学音乐与技术本科专业 让音乐无限可能!...

    美国计算机加音乐专业,卡内基梅隆大学音乐与技术本科专业 让音乐无限可能!...

    近些年,随着越来越多的跨界合作,衍生出一个新的职业,音乐技术,它是集科技与艺术于一体,越来越多的音乐制作人将电脑和软件作为自己的新式乐器,新世纪的电子音乐模式走入大家的视野,从而音乐与技术专业非常火爆...

    2024-04-01 05:54:24
  • 从ReentrantLock角度解析AQS

    从ReentrantLock角度解析AQS

    基于JDK8,今天重点来聊下JUC并发包下的一个类,AbstractQueuedSynchronizer。首先,浅显的从名字上看,抽象的队列同步器;实际上,这名字也跟它的作用如出一辙。抽象,即需要被继承;队列同步器,其内部维护了一个队列,供线程入队等待;最终实现多个线程访问共享资源的功能。

    2024-04-01 05:54:17
  • windbg定位死锁问题

    windbg定位死锁问题

    操作系统对死锁的描述如下: 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 那么为什么会产生死锁呢? 1.因为系统资源不足。...

    2024-04-01 05:54:11
  • Windows下Nacos启动报错 Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.

    nacos-server-2.0.3 启动失败,查看Nacos.log如下报错: 2021-10-25 09:58:39,265 ERROR Error starting Tomcat context...

    2024-04-01 05:53:24
  • 如何用人工动鼠标的方式打开滑块验证码?

    如何用人工动鼠标的方式打开滑块验证码?

    点击关注公众号,技术干货及时送达有朋友在下方评论:他问,能否来一篇处理滑块验证码的文章。我回复说,可以一试。随后,我便搜索网上有没有类似的文章。如果遍地都是,那我也没有必要再添一份冗余。结果发现有类似...

    2024-04-01 05:53:17
  • 什么是超融合一体机?与超融合服务器是一回事吗?

    什么是超融合一体机?与超融合服务器是一回事吗?

    虽然超融合架构以其为用户带来的巨大价值,已经被越来越广泛地接受,但市场上对超融合仍然有诸多不清晰的概念和疑问,本系列文章将力求对这些概念进行逐一解释。 本篇解释大家经常问到和混淆的一个概念:超融合服务器是什么?超融合一体机是什么?两者有什么区别?下文特别整理了相关概念介绍。 首先,超融合是近几年兴起的一种新的IT 基础架构,这种架构具备以下特点: 1.符合软件定义数据中心理念,一定是通过软...

    2024-04-01 05:53:10
  • mysql 8.0.17 解压版安装教程

    mysql 8.0.17 解压版安装教程

    (2)执行mysqld --initialize命令,此时会生成一个新目录data,查看.err文件,可以看到root用户生成的随机密码;(1)D:\Program Files\mysql\data ...

    2024-04-01 05:52:22