代码拉取完成,页面将自动刷新
from ctypes import *
import os
import struct
import platform
arch = platform.architecture()
if (arch[1] == 'WindowsPE'):
if (arch[0] == '64bit'):
libjbigdec = cdll.LoadLibrary("./lib/bin/libjbigdec-w64.dll")
else:
libjbigdec = cdll.LoadLibrary("./lib/bin/libjbigdec-w32.dll")
else:
libjbigdec = cdll.LoadLibrary("./libjbigdec.so")
#SaveJbigAsBmp = libjbigdec.SaveJbigAsBmp
#SaveJbigAsBmp.restype = None
#SaveJbigAsBmp.argtypes = [c_void_p, c_int, c_char_p]
#SaveJbig2AsBmp = libjbigdec.SaveJbig2AsBmp
#SaveJbig2AsBmp.restype = None
#SaveJbig2AsBmp.argtypes = [c_void_p, c_int, c_char_p]
jbigDecode = libjbigdec.jbigDecode
jbigDecode.restype = None
jbigDecode.argtypes = [c_void_p, c_int, c_int, c_int, c_int, c_void_p]
class CImage:
def __init__(self, buffer):
self.buffer = buffer
self.buffer_size=len(buffer)
(self.width, self.height,
self.num_planes, self.bits_per_pixel) = struct.unpack("<IIHH", buffer[4:16])
self.bytes_per_line = ((self.width * self.bits_per_pixel + 31) >> 5) << 2
def DecodeJbig(self):
out = create_string_buffer(self.height * self.bytes_per_line)
jbigDecode(self.buffer[48:], self.buffer_size-48, self.height, self.width, self.bytes_per_line, out)
return out
if __name__ == '__main__':
import sys, os
if len(sys.argv) < 3:
print("Usage: %s input output" % sys.argv[0])
sys.exit()
f = open(sys.argv[1], "rb")
buffer_size = os.stat(sys.argv[1]).st_size
buffer = f.read()
#SaveJbigAsBmp(buffer, buffer_size, sys.argv[2].encode("ascii"))
cimage = CImage(buffer)
out = cimage.DecodeJbig()
# PBM is only padded to 8 rather than 32.
# If the padding is larger, write padded file.
width = cimage.width
if (cimage.bytes_per_line > ((cimage.width +7) >> 3)):
width = cimage.bytes_per_line << 3
fout = open(sys.argv[2].replace(".bmp", ".pbm"), "wb")
fout.write("P4\n".encode("ascii"))
fout.write(("%d %d\n" % (width, cimage.height)).encode("ascii"))
fout.write(out)
fout.close()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。