jpeg_DHTstrip.py

JPEGからDHTを削除するプログラム。

#!/usr/bin/env python
import webapp2
import logging

def DHTstrip(data):
    s = ""
    pos = 0
    while pos < len(data):
        c = data[pos]
        pos += 1
        if c != '\xff': # mark
            s += c
            continue
        c = data[pos]
        pos += 1
        if c in  '\xd8\xd9\x00': # SOI EOI
            logging.info("%4d FF%02X" % (pos-2,ord(c)))
            s += data[pos-2:pos]
            skip = 0
        else:
            skip = ord(data[pos])*256+ord(data[pos+1])
            logging.info("%4d FF%02X %d bytes" % (pos-2, ord(c), skip))
            if c != '\xc4': # skip DHT
                s += data[pos-2:pos+skip]
        pos += skip
    return s
 
class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("""<html>
<head><title>JPEG DHTstrip</title></head><body>
JPEG DHTstrip<br>
<form action="/jpeg/DHTstrip/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image"><input type="submit">
</form></body></html>""")

    def post(self):
        image_data = self.request.get('image')
        image_data = DHTstrip(image_data)
        self.response.headers['Content-Type'] = "image/jpeg"
        self.response.out.write(image_data)

app = webapp2.WSGIApplication([
    ('/jpeg/DHTstrip.*', MainHandler)
    ], debug=True)