How to compress Image in gzip format

H

Some times the Size of images are too large and in some of the applications images are needed to save on particular server but because off large size it takes lots off time to save into server.If we compress that image into a particular format then we can save some space of server.

Step 1 – Create one Category and add libz.dylib library.

Step 2 – in .h file i.e in interface file mention the list of methods.

here the name of category is GZIP.

@interface NSData (GZIP)

and mention the list of methods.

– (NSData *)gzippedDataWithCompressionLevel:(float)level;

– (NSData *)gzippedData;

and end the interface using

@end

Step 3 – in .m file i.e in implementation file

#import <zlib.h>

#define CHUNK_SIZE 16384

add the implementation of listed methods.

@implementation NSData (GZIP)

– (NSData *)gzippedDataWithCompressionLevel:(float)level{

if ([self length]){

z_stream stream;

stream.zalloc = Z_NULL;

stream.zfree = Z_NULL;

stream.opaque = Z_NULL;

stream.avail_in = (uint)[self length];

stream.next_in = (Bytef *)[self bytes];

stream.total_out = 0;

stream.avail_out = 0;

int compression = (level < 0.0f)? Z_DEFAULT_COMPRESSION: (int)roundf(level * 9);

if (deflateInit2(&stream, compression, Z_DEFLATED, 31, 8, Z_DEFAULT_STRATEGY) == Z_OK){

NSMutableData *data = [NSMutableData dataWithLength:CHUNK_SIZE];

while (stream.avail_out == 0){

if (stream.total_out >= [data length]){

data.length += CHUNK_SIZE;

}

stream.next_out = [data mutableBytes] + stream.total_out;

stream.avail_out = (uint)([data length] – stream.total_out);

deflate(&stream, Z_FINISH);

}

deflateEnd(&stream);

data.length = stream.total_out;

return data;

}

}

return nil;

}

– (NSData *)gzippedData{

return [self gzippedDataWithCompressionLevel:-1.0f];

}

@end

Step 4 – import category where we want to compress image

#import “NSData+GZIP.h”

Step 5 – Convert image into NSData

NSData *userFile = UIImageJPEGRepresentation(img, 1.0f);

Step 6 – call the gzippedData method.

NSData *compressedData = [userFile gzippedData];

Now Compressed image is in compressedData variable.

 

Thank You.

About the author

smita.kale
By smita.kale

Category