質問

何らかのデータを変更する方法があります - より具体的には:画像 - キャッシュされる前に?

私は不当に大きいAPIから画像をダウンロードします。彼らが到着したらすぐにそれらを拡大縮小したいので、スペースが少なくなる必要があり、キャッシュからロードされるたびにそれらを拡張する必要はありません。

AFImageResponseSerializerのサブクラスまたはSTAHTTPRequestOperationのサブクラスのどちらかのスケーリングを行うことができます。しかし、どちらの場合も、画像はすでに元のサイズにキャッシュされています。

キャッシュに書き込まれる前にデータをアクセスして変更する方法は?

役に立ちましたか?

解決

自分の質問に答えるために:私の操作クラスのconnection:willCacheResponse:を上書きすることによってそれを達成しました。

@implementation MYImageRequestOperation

-(CGSize)size
{
    return CGSizeZero; // overwritten in subclasses
}



-(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{

    UIImage *image = [UIImage imageWithData:cachedResponse.data];
    GPUImageLanczosResamplingFilter *resizingFilter = [[GPUImageLanczosResamplingFilter alloc] init];

    CGFloat scale = [UIScreen mainScreen].scale;
    CGSize size = [self size];
    [resizingFilter forceProcessingAtSizeRespectingAspectRatio: CGSizeMake(size.width * scale, size.height * scale)];
    GPUImagePicture *gpuImage = [[GPUImagePicture alloc] initWithImage:image];
    [gpuImage addTarget:resizingFilter];
    [gpuImage processImage];

    UIImage *smallImage = [resizingFilter imageFromCurrentlyProcessedOutput];

    NSData *data;

    if([[cachedResponse.response.MIMEType lowercaseString] isEqualToString:@"image/png"])
    {
        data = UIImagePNGRepresentation(smallImage);
    } else {
        data = UIImageJPEGRepresentation(smallImage, .9);
    }

    NSCachedURLResponse *response = [[NSCachedURLResponse alloc] initWithResponse:cachedResponse.response data:data];
    return response;
}
@end
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top