Detect whether an UIImage is PNG or JPEG?

17,575

Once you have a UIImage, it is capable of producing either a JPEG or PNG using UIImageJPEGRepresentation or UIImagePNGRepresentation. The format of the original image is only important when the UIImage is being created from it (decides which CFImage provider to load it).

If it's important to your app or algorithm to ensure you save it as the original format, I think you have to maintain that info to use when your writing it. I double checked and couldn't find anything that advertised what format it came from.

Are you going to change the image through UIImageView or does the image stay unchanged in your experience? If it's not changed and you just need the UI to select the image, could you get to file bytes? For example, if you showed the images just to select and then you upload them to a server or something, the UIImage could only be for viewing and selecting and if your data structure remembers which file it came from, you could get the bits back off disk and upload. If your changing the file in the view, then you or the user needs to decide the output (and if jpeg the quality) of the image.

Share:
17,575
Uwe Keim
Author by

Uwe Keim

German developer. Some of my apps: SharePoint Systemhaus Göppingen (zwischen Stuttgart und Ulm) Eigene Homepage erstellen Test Management Software Windows 10 Ereignisanzeige Very proud father of Felix (2012) and Ina (2014). Loves running, climbing and Indian food. Code Project member #234.

Updated on June 23, 2022

Comments

  • Uwe Keim
    Uwe Keim almost 2 years

    Currently doing my first steps with iPhone development through MonoTouch, I am playing with an UIImage that I read from the photo library.

    What I want to achieve is to get the raw byte array (byte[]) of the image.

    I know that there are the UIImageJPEGRepresentation and UIImagePNGRepresentation wrappers in MonoTouch. I also know how to use them. What I don't know is:

    How do I decide which of these two functions to call?

    I.e. if the original image is a JPEG image, I do not want to get it as an PNG but also as a JPEG, and vice versa.

    Is there a way to do this, or am I missing some points on this?

  • Uwe Keim
    Uwe Keim over 12 years
    Thank you, @bryanmac Basically I am writing a small tool to select an image from the photo library and upload it through a web service. So I am not producing the image, but just "consuming" it. Maybe I could get the raw bytes somewhere in the FinishedPickingImage override's NSDictionary editingInfo parameter?
  • Fustigador
    Fustigador almost 12 years
    So, if i have understand, it really doesn't matters if the photo was originally uploaded as PNG or JPEG... once you get the UIImage you can convert it to both formats?
  • Biclops
    Biclops about 10 years
    If there's an alpha channel, then you're going to want to know which to use. I took a jpeg and then used uiimage to display it and then saved it to a local data base, I retrospect I should have just saved it to the disk, any who I used UIImagePNGRepresentation instead of UIImageJPEGRepresentation and later tried to restore it and this is the result imgur.com/2yG3Zv2 As you can see the transparency gets messed up. As I said I should probably just saved it to the hdd and stored the path but the point is that in some cases it does matter which function you use.
  • ma11hew28
    ma11hew28 almost 9 years
    If you're using a UIImagePickerController, look at the UIImagePickerControllerMediaType editing information key. Then, see UTI Image Content Types.