Hi all, has anyone had success getting CIFilters to work in the latest playgrounds ? It keeps throwing me a “Failed to convert UIImage to PNG”. You can store a UIImage (or an NSImage on Mac) as raw data. This can be useful if you’d like to save it in Core Data. Here’s how you convert a. Hi all,to convert uiimage to nsdataobjective cnsdata *data = uiimagepngrepresentation();swiftlet imagedata: nsdata.
|Published (Last):||26 October 2010|
|PDF File Size:||15.85 Mb|
|ePub File Size:||20.77 Mb|
|Price:||Free* [*Free Regsitration Required]|
iOS Dev Diary
How often do you convert a UIImage into a Data object? After doing this I started seeing memory spikes and leaks appear which got me thinking on how I can better profile different options for performing this conversion.
If you want to follow along you can create your own Swift Playground using this gist. The first step was looking at the different ways you can convert a UIImage into Data. I settled on the following three approaches.
How to convert a UIImage into NSData | iOS Dev Diary
Out of all the options this is the most straightforward and widely used. NSHipster has a great article with details here. I was interested to see if there was a memory benefit as well.
This makes testing much easier. For this example we just use Top, Left.
Image quality is an important aspect of my projects, so the tests where performed using the compression ratios of 1. These compression ratios where then run using 1, 2, 14, 20, and 50 executions.
These frequencies demonstrate when image caching and Uiimaage Pool strategies start to impact results. I test each of the above mentioned approaches using the template outlined below. See the gist of the details for each approach.
The implementation for each approach is slightly different, but the same iteration and compression ratios are used to keep the outcome as comparative as possible.
I am sure there is a ton of optimizations that could be made to bring these numbers down. There is more work to be done on why the compression ratio has an inconsistent impact, my guess is this is a result to caching within the test. Although the ImageIO strategy was better uuiimage a single execution scenario I question if the proper handling of image orientation would reduce or eliminate any of your memory savings.
There are more comprehensive approaches out there. This is just an experiment using Playgrounds and basic memory sampling. Testing Scenarios For my scenarios it was important to understand how memory is impacted based on the following: Number of executions, i.
How the Compression ratio impacts memory usage.
Testing Each Approach I test each of the above mentioned approaches using the template outlined below. At the top of the method a memory sample is taken The helper method for converting a UIImage to a Uiijage object is called in a loop. To make sure we are measure the same resulting data across tests, we record the length of the first Data conversion.
Swift: Convert between CGImage, CIImage and UIImage – Hawk Wiki
When the loop has completed the proper number of iterations the memory is again sampled and the delta is recorded. There is some variability on how each approach is tested. Test Cinvert Below is the result broken down by iteration. Caveats There are more comprehensive approaches out there. Resources Gist of the Swift Playground is available here Share this: