Using Huffman coding to compress images taken by the iPhone camera

后端 未结 2 1555
半阙折子戏
半阙折子戏 2021-01-25 04:14

Im thinking to use the Huffman coding to make an app that takes pictures right from the iPhone camera and compress it. Would it be possible for the hardware to handle the comple

相关标签:
2条回答
  • 2021-01-25 04:33

    If you mean the image files (like jpg, png, etc), then you should know that they are already compressed with algorithms specific to images. The resulting files would not huffman compress much, if at all.

    If you mean that you are going to take the UIImage raw pixel data and compress it, you could do that. I am sure that the iPhone could handle it.

    If this is for a fun project, then go for it. If you want this to be a useful and used app, you will have some challenges

    1. It is very unlikely that Huffman will be better than the standard image compression used in JPG, PNG, etc.

    2. Apple has already seen a need for better compression and implemented HEIF in iOS 11. WWDC Video about HEIF

    3. They did a lot of work in the OS and Photos app to make sure to use HEIF locally, but if you share the photo it turns it into something anyone could use (e.g. JPG)

    4. All of the compression they implement uses hardware acceleration. You could do this too, but the code is a lot harder than Huffman.

    So, for learning and fun, it's a good project -- it might be easier to do as a Mac app instead, but for something meant to be real, it would be extremely hard to overcome the above issues.

    0 讨论(0)
  • 2021-01-25 04:40

    There are 2 parts, encoding and decoding. The encoding process involves constructing a tree or a table based representation of a tree. The decoding process covers reading from huff encoding bytes and undoing a delta. It would likely be difficult to get much speed advantage in the encoding as compared to PNG, but for decoding a very effective speedup can be seen by moving the decoding logic to the GPU with Metal. You can have a look at the full source code of an example that does just that for grayscale images on github Metal Huffman.

    0 讨论(0)
提交回复
热议问题