jpeg画像をダウンロードするアプリケーションがありますが、アプリケーションに必要以上に大きなものがあります。私は画像のNSDataをダウンロードするクラスを作成しました。どのようなNSDataを取得し、画像を圧縮するための最良の方法です。iOSはnsdataから画像を圧縮します
これまでのところ私が見た唯一の方法は、イメージをディスクに一時的に書き込み、アクセスしてディスク上のJPEGを圧縮することです。
ディスクに書き込んで直接圧縮してデータを受け取る必要がない別の方法がありますか?
jpeg画像をダウンロードするアプリケーションがありますが、アプリケーションに必要以上に大きなものがあります。私は画像のNSDataをダウンロードするクラスを作成しました。どのようなNSDataを取得し、画像を圧縮するための最良の方法です。iOSはnsdataから画像を圧縮します
これまでのところ私が見た唯一の方法は、イメージをディスクに一時的に書き込み、アクセスしてディスク上のJPEGを圧縮することです。
ディスクに書き込んで直接圧縮してデータを受け取る必要がない別の方法がありますか?
質問していると思っているのであれば、+imageWithData:
を使ってNSDataの塊でUIImageオブジェクトを作成することができます。
NSData *imageData = // Get the image data here
UIImage *image = [UIImage imageWithData:data];
アプリケーションをダウンロードする前にイメージを圧縮する方がよいでしょう。ただし、これがあなたのコントロールを超えている場合は、後で圧縮してください。画像の種類があることができ
+ (NSData*)imageDataWithCGImage:(CGImageRef)CGimage UTType:(const CFStringRef)imageUTType desiredCompressionQuality:(CGFloat)desiredCompressionQuality
{
NSData* result = nil;
CFMutableDataRef destinationData = CFDataCreateMutable(kCFAllocatorDefault, 0);
CGImageDestinationRef destinationRef = CGImageDestinationCreateWithData(destinationData, imageUTType, 1, NULL);
CGImageDestinationSetProperties(destinationRef, (CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:desiredCompressionQuality], (NSString*)kCGImageDestinationLossyCompressionQuality, nil]);
if (destinationRef != NULL)
{
CGImageDestinationAddImage(destinationRef, CGimage, NULL);
if (CGImageDestinationFinalize(destinationRef))
{
result = [NSData dataWithData:(NSData*)destinationData];
}
}
if (destinationData)
{
CFRelease(destinationData);
}
if (destinationRef)
{
CFRelease(destinationRef);
}
return result;
}
:私は与えられた画像を変換し、クラスメソッドの機能になるだろうあなたはCGImageDestination.h
で定義された関数を使用することができます別の形式に画像を変換する
kUTTypePNGですが、品質パラメータはほとんど機能しません。また、あなたのニーズに合わせてkUTTypeJPEG2000にすることもできます。
新しい画像をデータで初期化したり、ディスクに保存したりすることができます。