Created
May 27, 2025 20:31
-
-
Save NyanSatan/e593ca11a0b29ea842b20eee14c6c4ce to your computer and use it in GitHub Desktop.
Revisions
-
NyanSatan created this gist
May 27, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,201 @@ iVBORw0KGgoAAAANSUhEUgAAAEcAAABUCAYAAADQ8ioqAAAlaUlEQVR4nO18C5Sd ZXnu+/7f9///vs5kMntuuU0SkpCEBAiRcAmBAFaPuOoStWKRUsVabG2169jTi21P T3vO6lmrXa4q2lq1NwWtWBVFgR4BEREBFYIYLrlM7slMkj2XPfv2377vPev5/hnq Oksp4Sb28MFOMnv27P1/7/9envd5n2+IXlmvrOeymH7GKyyExeHFi5dtOX/LL6xa vXxrYCxVj580/7Z7/1fvue++W4wx2c/q2jT9DFepXK6eedaG887cvGnbmevXbO9f UNxQ7aQ0NNsoHVq9uv7tBx74+v8XxllY6x8cXbFi3f79+5+cqU+eWLdh3Xnv+NW3 /fFpixZuDsRbyJQGkjQ4O3CI9n3kE7Tyfe97zciSJZ86ODb2+NMXq7Vf7e3t67bb rSiKOj/XxqkN1IY3n3vO1u0XnvO6FUuHt4UmGvzcd578i3/9x0//1aLBgXVLK+Gl Znam3FYh6SCgQlAgu2SpJFds5ZEbbli34Q1v2ArjDA0PL/2liy669uKhodesDoKV 9Sg68dGxsQ/fcc89N6dpmvxcGWfJ0iUrrrn6TddfdcXWa8ohDR8+eFR12k1SaZO2 n7P27d+8beizjcScbMdRVgkL5IdlKgQ+WdMR3Vuh3l98PTW/9xi9bvHi61vbt5/4 vY0bP7jhn//53G6zSQEReURL/rhW+8zZ11132ce+9KUPTtXr4z8XCfmsLede/Oe/ ++5PLFEn1x6qJ9SxTOUwIKVYPMmYki595Pad1x09fHTPB9977c1LB3sXVXoWkMky qZ8YJyPEwizxY7vZ/MUNtOyMM5JFhw4F6egoCZHERDQ+McGzcUzUbNKX3/72P//c 5z73P0REXtaew8y8bu3qS488ft/aR/bdR2pkm9T6RqhncYFxH1LjEaUZXX7Bhnce Xrns+4uHF/h9lQLFSSTN2QYZK2TZI6U8Gg58mq7VaOrQoYCbTRokkpLvU5amlBJR GoYy22xytVAY9TxPvRiJ+wU1jojIzqf23r9u5bZjvX19i/xqH3ejVGZbXamWi2xF RJV7aWPFbtu8pHxRMnuCDtRJssyweB75KiDjs2jLrBonRL/1YjKja2n8xs/R7MGD tHh0lA2RaCIJ4phDIjo5OztmrTX0IizvhX7Dw3v3/mgmpse6CVH95F5qtmZZyCft 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 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,69 @@ #!/usr/bin/env python3 # Pre-release iPhone OS 1 iBoots used some weird formats for storing graphics, # this script is meant to decode Apple logo found on prototype iPod touch 1 # that ran iBoot-115.6 which is a good ole SwitchBoard gear, but with blood # # This particular example is more or less just RGBA, but long sequences # of same color are TLV encoded # # The format was likely just meant to be temporary, and provides almost no metadata, # even width & height are hardcoded into the iBoot itself import sys import struct from PIL import Image WIDTH = 71 HEIGHT = 84 def main(): try: _, file, out = sys.argv except ValueError: print("usage: %s <input> <output>" % sys.argv[0]) exit(-1) with open(file, "rb") as f: buf = f.read() image_len = len(buf) if buf[:4] != b"rgba": print("not \"rgba\" image!") exit(-1) image = Image.new("RGBA", (WIDTH, HEIGHT), None) off = 4 curr_x = 0 curr_y = 0 while True: if off >= image_len: break if buf[off] == 0x13 and buf[off + 1] == 0x57: fill_len = struct.unpack("<H", buf[off + 2 : off + 2 + 2])[0] off += 4 else: fill_len = 1 r, g, b, a = struct.unpack("BBBB", buf[off : off + 4]) off += 4 fill_len_cnt = 0 while -fill_len != fill_len_cnt: image.putpixel((curr_x, curr_y), (r, g, b, a)) fill_len_cnt -= 1 curr_x += 1 if curr_x == WIDTH: curr_y += 1 curr_x = 0 with open(out, "wb") as f: image.save(f, "png") if __name__ == "__main__": main()