调整专辑图稿表单mp3文件

时间:2013-01-13 17:04:46

标签: ios image resize imageview

我必须使用以下代码调整相册图片的大小:

for (NSString *format in [asset availableMetadataFormats]) {
        for (AVMetadataItem *item in [asset metadataForFormat:format]) {
            if ([[item commonKey] isEqualToString:@"title"]) {
                //NSLog(@"name: %@", (NSString *)[item value]);
                downloadedCell.nameLabel.text = (NSString *)[item value];

            }
            if ([[item commonKey] isEqualToString:@"artist"]) {
                downloadedCell.artistLabel.text = (NSString *)[item value];
            }
            if ([[item commonKey] isEqualToString:@"albumName"]) {
                //musicItem.strAlbumName = (NSString *)[item value];
            }
            if ([[item commonKey] isEqualToString:@"artwork"]) {
                UIImage *img = nil;
                if ([item.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
                    img = [UIImage imageWithData:[item.value copyWithZone:nil]];
                }
                else { // if ([item.keySpace isEqualToString:AVMetadataKeySpaceID3]) {
                    NSData *data = [(NSDictionary *)[item value] objectForKey:@"data"];
                    img = [UIImage imageWithData:data];

                }
                // musicItem.imgArtwork = img;
                UIImage *newImage = [self resizeImage:img width:70.0f height:70.0f];
                downloadedCell.artworkImage.image = newImage;

            }

当我应用此方法时:

- (UIImage *)resizeImage:(UIImage *)image width:(int)width height:(int)height {
    //NSLog(@"resizing");
    CGImageRef imageRef = [image CGImage];
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

    //if (alphaInfo == kCGImageAlphaNone)
    alphaInfo = kCGImageAlphaNoneSkipLast;

    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef),
                                                4 * width, CGImageGetColorSpace(imageRef), alphaInfo);
    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
    CGImageRef ref = CGBitmapContextCreateImage(bitmap);
    UIImage *result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);
    CGImageRelease(ref);

    return result; 
}

我总是得到一张你在上面照片中看到的噪点图像。 http://postimage.org/image/jltpfza11/

如何获得更好的分辨率图像?

2 个答案:

答案 0 :(得分:0)

尝试使用以下方式明确指定上下文的插值级别:

CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh);

你的resizeImage:width:height:方法因此变为:

-(UIImage *)resizeImage:(UIImage *)image width:(int)width height:(int)height {
   //NSLog(@"resizing");
   CGImageRef imageRef = [image CGImage];
   CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

   //if (alphaInfo == kCGImageAlphaNone)
   alphaInfo = kCGImageAlphaNoneSkipLast;

   CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef),
                                            4 * width, CGImageGetColorSpace(imageRef), alphaInfo);
   CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh);
   CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
   CGImageRef ref = CGBitmapContextCreateImage(bitmap);
   UIImage *result = [UIImage imageWithCGImage:ref];

   CGContextRelease(bitmap);
   CGImageRelease(ref);

   return result;

}

答案 1 :(得分:0)

如果你的视图是74x74,你应该调整到视网膜显示器的两倍。所以,像:

CGFloat imageSize = 74.0f * [[UIScreen mainScreen] scale];
UIImage *newImage = [self resizeImage:img width:imageSize height:imageSize];

然后,您需要将图像视图的contentMode设置为类似UIViewContentModeScaleAspectFill的内容。