ALAsset缩略图没有向内黑色半透明边框

时间:2013-05-04 11:21:18

标签: iphone ios objective-c alasset

我发现对于图库中的大多数照片,[ALAsset thumbnail]将返回带有黑色半透明边框的缩略图。

我的问题是,如何在没有此边框的情况下获取缩略图?

2 个答案:

答案 0 :(得分:0)

没有方法可以获得没有1像素黑色边框的缩略图。

您也可以使用

 [asset aspectRatioThumbnail]; // but it is not rounded.

所以我认为你应该自己调整图像大小:

asset.defaultRepresentation.fullScreenImage or
asset.defaultRepresentation.fullResolutionImage

答案 1 :(得分:0)

你有很多选择。如果你只需要在屏幕上显示它,你可以简单地伪造它,这样缩略图的1个像素就不可见了。你可以将UIImageView放在一个剪辑到边界的UIView中。

UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
view.backgroundColor = [UIColor clearColor];
view.clipsToBounds = YES;
UIImageView* imgView = [[UIImageView alloc] initWithFrame:CGRectMake(-1, -1, 202, 202)];
imgView.image = [asset thumbnail];
[view addSubview:imgView];

或者更好的是,创建一个UIView子类并覆盖drawRect。

-(void)drawRect:(CGRect)rect
{
    UIImage* thumb = [asset thumbnail];
    [thumb drawInRect:CGRectMake(rect.origin.x-1, rect.origin.y-1, rect.size.width+2, rect.size.height+2)];
}

或者你可以使用aspectRatioThumbnail来让它自己平方。

UIImageView* imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
imgView.image = [asset aspectRatioThumbnail];
imgView.contentMode = UIViewContentModeScaleAspectFill;

或者,如果您因某种原因确实需要裁剪UIImage,可以这样做。

UIImage* thumb = [asset thumbnail];
CGRect cropRect = CGRectMake(1, 1, thumb.size.width-2, thumb.size.height-2);
cropRect = CGRectMake(cropRect.origin.x*thumb.scale, cropRect.origin.y*thumb.scale, cropRect.size.height*cropRect.scale);       

CGImageRef imageRef = CGImageCreateWithImageInRect([thumb CGImage], cropRect);
UIImage* result = [UIImage imageWithCGImage:imageRef scale:thumb.scale orientation:thumb.imageOrientation]; 
CGImageRelease(imageRef);