Я нашел, что для большинства фотографий в галерее [ALAsset thumbnail]
вернет эскиз с внутренней полупрозрачной рамкой.ALAsset thumbnail без внутренней черной полупрозрачной рамки
Мой вопрос: как я могу получить миниатюру без этой границы?
Я нашел, что для большинства фотографий в галерее [ALAsset thumbnail]
вернет эскиз с внутренней полупрозрачной рамкой.ALAsset thumbnail без внутренней черной полупрозрачной рамки
Мой вопрос: как я могу получить миниатюру без этой границы?
У вас есть много вариантов. Если вам просто нужно отобразить его на экране, вы можете просто подделать его так, чтобы 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);
Нет никаких способов получить миниатюру без 1 пиксельной черной границы.
Вы также можете использовать
[asset aspectRatioThumbnail]; // but it is not rounded.
Так я думаю, вы должны изменить размер изображения самостоятельно с помощью:
asset.defaultRepresentation.fullScreenImage or
asset.defaultRepresentation.fullResolutionImage
fullScreenImage или fullResolutionImage замедляет код, не так ли? –
уверен, что если изображение сильно отличается от замедления, лучше использовать миниатюры –