преобразовать прямоугольное изображение в квадратное изображение, используя цель c - PullRequest
1 голос
/ 03 февраля 2012

Я работаю над созданием галереи изображений с миниатюрами разных размеров. Я хочу преобразовать эти миниатюры прямоугольника в квадратный размер, чтобы все они могли выглядеть одинаковыми по размеру. Я не против обрезать его из расширенной части, но я не уверен, как это сделать. Может кто-нибудь, пожалуйста, помогите мне?

Спасибо
Панкай

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

Вам нужно использовать изображение в методе rect, передавая изображение и необходимые границы ...

CGImageRef imageRef = CGImageCreateWithImageInRect([anImage CGImage], requiredBounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);

Я добавил это в категорию UIImage (UIImage + Resize) в следующем посте,Вы также можете скачать исходный код - Пример категорий

0 голосов
/ 24 февраля 2016

Я использую следующий метод. Входными данными являются UIImage для масштабирования и размер фрейма UIImageView, в котором находится UIImage. Это работает, когда высота и ширина кадра равны.

Одна важная вещь: Я сохраняю соотношение изображения. Я не расширяю изображение, чтобы покрыть всю площадь. Если вы хотите сделать это, вы должны изменить строку drawInRect на [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; и удалить if-else.

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {

    CGFloat scaleRatio;

    if (image.size.width > image.size.height) {

        scaleRatio = image.size.height/image.size.width;

    }else{

        scaleRatio = image.size.width/image.size.height;
    }

    CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextConcatCTM(context, scaleTransform);

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);

    if (image.size.width > image.size.height) {

        [image drawInRect:CGRectMake(0, (newSize.height/2)-(newSize.height*scaleRatio/2), newSize.width, newSize.height*scaleRatio)];

    }else{

        [image drawInRect:CGRectMake((newSize.width/2)-(newSize.width*scaleRatio/2), 0, newSize.width*scaleRatio, newSize.height)];
    }

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}
0 голосов
/ 03 февраля 2012

Что ж, если вы используете UIImageView для отображения своих изображений (что я более чем уверен, что вы это делаете), вы можете установить его contentMode свойство равным UIViewContentModeScaleAspectFill. Это должно «обрезать» ваше изображение до границ вашего UIImageView. Если ваше изображение выйдет за границы UIImageView, убедитесь, что для clipsToBounds также установлено значение YES.

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...