sinat_37239798
一知半解仙
采纳率0%
2021-01-26 11:51

java怎么解析IMG格式的文件?

各位大神们,有谁能用Java解析.IMG文件,或者把它用Java转成图片格式,我是无知的小程序员,请求大家的帮助,谢谢!!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • sinat_37239798 一知半解仙 3月前

    首先非常感谢你的回答,两种方案均行不通,原因:

    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,让后人学习学习。谢谢

    点赞 评论 复制链接分享
  • qq_36911145 封印di恶魔 3月前

    这个先试下

    https://blog.csdn.net/demaissb/article/details/55252998

    不行的话找个能转换的软件,用java调cmd命令去调用软件转

    点赞 评论 复制链接分享
  • zhou_RR 社会瑞弟123 2月前

    坐等大佬回答

    点赞 评论 复制链接分享

为你推荐