各位大神们,有谁能用Java解析.IMG文件,或者把它用Java转成图片格式,我是无知的小程序员,请求大家的帮助,谢谢!!!
这个先试下
https://blog.csdn.net/demaissb/article/details/55252998
不行的话找个能转换的软件,用java调cmd命令去调用软件转
首先非常感谢你的回答,两种方案均行不通,原因:
1..IMG为工业加密级文件,并非为图像格式,所以代码,转换软件识别不出来,导致转换失败。
2.调用python脚本处理转换为png是可行的。
3.项目为Java开发,所以考虑用Java代替。
python脚本为:
# coding: utf-8
import sys
import binascii
import cv2
import numpy as np
def img_switch(img_name):
"""
这个是把IMG和HIS格式图像转化成可读形式文件的接口
:param img_name: 要处理文件的名称
:return: 可读图像的数据
"""
try:
with open(img_name, 'rb') as f:
data = f.read()
except:
return 'error:文件名不存在'
img_type = img_name[-3:]
if 'img' == img_type or 'IMG' == img_type:
# 图片宽度
width = 1024
# 图片高度
height = 1024
elif 'his' == img_type or 'HIS' == img_type:
# 图片宽度
width = 2176
# 图片高度
height = 1792
else:
img_data = cv2.imread(img_name, cv2.IMREAD_UNCHANGED)
if img_data.dtype == np.uint16:
img_type = 16
elif img_data.dtype == np.uint8:
img_type = 8
if len(img_data.shape) == 3:
img_data = img_data[:, :, 0]
# img_shape = np.array(img_data.shape)
# img_data = img_data.reshape((img_shape.prod(), ))
#print('23424235423')
img_data = np.concatenate(img_data, 0)
return list(img_data), img_type
# 首先是把二进制数据转化为16位
hex_str = binascii.b2a_hex(data)
# 接着选取图片对应的数据,是从len(hex_str)-4*width*height位往后的数据
drift_size = len(hex_str) - 4 * width * height
sel_hex = hex_str[drift_size:]
sel_hex = str(sel_hex)[2: -1]
# sel_hex = [sel_hex[i*4: (i+1)*4] for i in range(width*height)]
# 将选出来的数据4位4位的分开
sel_hex = [sel_hex[i * 4: (i + 1) * 4] for i in range(width * height)]
# 把数据的高八位和低八位换位置
sel_hex = [i[2:] + i[:2] for i in sel_hex]
# print(str(sel_hex[0]))
# 将选出来的4位16进制转化为10进制
img_data = [int(i, 16) for i in sel_hex]
# 之后将数据转化为(height, width, 1)的格式
# img_data = [img_data[i * width: (i + 1) * width] for i in range(height)]
# img_data = np.array(img_data)
# img_data = img_data.reshape((height, width, 1))
# 将图片简单换算成8位的格式,保存成jpg格式
# img_data = img_data/255.
# img_data = img_data.astype(np.uint16)
return img_data, 16
if __name__ == '__main__':
img_name = sys.argv[1]
output_data, img_type = img_switch(img_name)
output_data = [str(i) for i in output_data]
print(str(img_type) + ',' + ','.join(output_data))
4.网友们有人会的话,还请帮助用Java解决下问题3,让后人学习学习。谢谢
坐等大佬回答