def _test_compress(self, embed_data): image_path = os.path.join(tests_dir, 'origin.jpg') jaoutput = jpype.JClass('java.io.ByteArrayOutputStream')() jaimage = jpype.JClass( 'java.awt.Toolkit').getDefaultToolkit().getImage(image_path) jaencoder = jpype.JClass('james.JpegEncoder')(jaimage, 80, jaoutput, '') if embed_data: jaencoder.Compress( jpype.JClass('java.io.ByteArrayInputStream')( jpype.java.lang.String( embed_data.decode('utf-8')).getBytes()), 'abc123') else: jaencoder.Compress() jaarray = jaoutput.toByteArray() jpeg_encoder.F5Random = JavaF5Random pyoutput = StringIO.StringIO() pyimage = Image.open(image_path) pyencoder = JpegEncoder(pyimage, 80, pyoutput, '') pyencoder.compress(embed_data, 'abc123') pyarray = pyoutput.getvalue() pyoutput.close() self.assertEqual(len(jaarray), len(pyarray), 'length is not same') for i in range(len(jaarray)): aa = int(jaarray[i]) bb = struct.unpack('b', pyarray[i])[0] self.assertEqual(aa, bb, '%d %d %d' % (i, aa, bb))
def _test_compress(self, embed_data): image_path = os.path.join(tests_dir, 'origin.jpg') jaoutput = jpype.JClass('java.io.ByteArrayOutputStream')() jaimage = jpype.JClass('java.awt.Toolkit').getDefaultToolkit().getImage(image_path) jaencoder = jpype.JClass('james.JpegEncoder')(jaimage, 80, jaoutput, '') if embed_data: jaencoder.Compress(jpype.JClass('java.io.ByteArrayInputStream')( jpype.java.lang.String(embed_data.decode('utf-8')).getBytes()), 'abc123') else: jaencoder.Compress() jaarray = jaoutput.toByteArray() jpeg_encoder.F5Random = JavaF5Random pyoutput = StringIO.StringIO() pyimage = Image.open(image_path) pyencoder = JpegEncoder(pyimage, 80, pyoutput, '') pyencoder.compress(embed_data, 'abc123') pyarray = pyoutput.getvalue() pyoutput.close() self.assertEqual(len(jaarray), len(pyarray), 'length is not same') for i in range(len(jaarray)): aa = int(jaarray[i]) bb = struct.unpack('b', pyarray[i])[0] self.assertEqual(aa, bb, '%d %d %d' % (i, aa, bb))
print 'the output file exists, do you really want to override it?' ''' answer = raw_input('y/n: ') if answer != 'y': print 'exit' sys.exit(0) ''' output = open(options.output, 'wb') if options.hasais == 'n': encoder = JpegEncoder(image, 80, output, options.comment, False) #image、output是文件对象 else: encoder = JpegEncoder(image, 80, output, options.comment, True) #image、output是文件对象 encoder.compress(data, options.password) output.close() print '\n----embed end--------' if options.type == 'x': print '----start extract------' if options.output: output = open(options.output, 'wb') else: output = StringIO.StringIO() image = open(options.image, 'rb') #steg_image JpegExtract(output, options.password).extract(image.read()) if not options.output: print output.getvalue() image.close()
print 'there\'s no data to embed' sys.exit(0) if not options.output: print 'you didn\'t specify the output jpeg file, if will be default output.jpg' options.output = 'output.jpg' elif os.path.exists(options.output) and os.path.isfile(options.output): print 'the output file exists, do you really want to override it?' answer = raw_input('y/n: ') if answer != 'y': print 'exit' sys.exit(0) output = open(options.output, 'wb') encoder = JpegEncoder(image, 80, output, options.comment) encoder.compress(data, options.password) output.close() if options.type == 'x': if options.output: output = open(options.output, 'wb') else: output = StringIO.StringIO() image = open(options.image, 'rb') JpegExtract(output, options.password).extract(image.read()) if not options.output: print output.getvalue() image.close() output.close() else: