Как получить измененное изображение с качеством оригинальной iOS?

Я просмотрел и применил множество ссылок для изменения размера изображения с тем же качеством, но не смог его получить.

Я могу получить изображение из UIView и изменить его размер с помощью кода, как указано ниже: -

- (UIImage *)imageWithView:(UIView *)view {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData* imageData =  UIImagePNGRepresentation(image);
    UIImage* pngImage = [UIImage imageWithData:imageData];
    UIImageWriteToSavedPhotosAlbum(pngImage, nil, nil, nil); // PNG image size: {750, 1334}
    NSLog(@"PNG Image Size: %@", pngImage);


    CGSize size = CGSizeMake(375, 667);
    [self imageWithImage1:pngImage scaledToSize:size];
    [self imageWithImage2:pngImage scaledToSize:size];

    return image;
}

- (UIImage *)imageWithImage1:(UIImage *)image scaledToSize:(CGSize)newSize
{
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData* imageData1 =  UIImagePNGRepresentation(newImage);
    UIImage* scaledImage1 = [UIImage imageWithData:imageData1];
    UIImageWriteToSavedPhotosAlbum(scaledImage1, nil, nil, nil); // PNG Resized image 1 size: {375, 667}
    NSLog(@"PNG Scaled Image Size: %@", scaledImage1);

    return newImage;
}

-(UIImage *)imageWithImage2:(UIImage*)image scaledToSize:(CGSize)newSize
{
    // Create a bitmap context.
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 1);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData* imageData1 =  UIImagePNGRepresentation(newImage);
    UIImage* scaledImage1 = [UIImage imageWithData:imageData1];
    UIImageWriteToSavedPhotosAlbum(scaledImage1, nil, nil, nil); // PNG Resized image 2 size: {375, 667}
    NSLog(@"PNG Scaled Image Size: %@", scaledImage1);

    return newImage;
}

Размер изображения PNG: {750, 1334}

Оба изображения, которые я получаю из изображения PNG после изменения размера, равны {375, 667}. Что правильно в соответствии с моим требованием.

Но качество обоих изображений с измененным размером ниже исходного изображения PNG. Я могу узнать, что кнопка, значки и текст размыты.

Как я могу это исправить. Пожалуйста, помогите, заранее спасибо.

Мне нужно изображение с измененным размером и таким же качеством, как изображение PNG.

Изображение PNG:

введите здесь описание изображения

Изображение 1 в формате PNG с измененным размером:

введите здесь описание изображения

Изображение 2 с измененным размером в формате PNG:

введите здесь описание изображения


person Asif Raza    schedule 21.08.2017    source источник
comment
это должно быть вниз, вы сжимаете и изменяете размер до дисплея без сетчатки   -  person Abdelahad Darwish    schedule 21.08.2017
comment
когда вы хотите отобразить изображение, и его размер удвоен {750, 1334}, вы можете отобразить этот UIImage * img = {750, 1334}.; img = [UIImage imageWithCGImage:img.CGImage масштаб:2 ориентация:img.imageOrientation];   -  person Abdelahad Darwish    schedule 21.08.2017
comment
Моя забота не показывать это. Мое требование - сохранить в Camera Roll половину исходного размера изображения с тем же качеством.   -  person Asif Raza    schedule 21.08.2017
comment
На самом деле я пытаюсь добавить изображение поверх видео в виде эскиза. Размер моего видео {320, 568}, а размер изображения {750, 1334}. Когда я добавляю его с помощью AVFoundation, CALayer изображения изменяет размер изображения до размера видео. Тогда у меня падает качество изображения. Вот почему я хочу изменить его размер с таким же качеством. Тогда хочу добавить на видео. Если у вас есть идеи, пожалуйста, помогите.   -  person Asif Raza    schedule 21.08.2017
comment
Спасибо, я уже следил за этим.   -  person Asif Raza    schedule 21.08.2017
comment
Угадайте, что вы хотите, это что-то для ImageOptim, которые используют различные оптимизации изображений для повторного сжатия без потери качества, не думайте для этого уже создана библиотека, хотя она с открытым исходным кодом, вы можете попробовать применить ее к своему проекту   -  person Tj3n    schedule 21.08.2017
comment
Привет @AsifRaza, как решить эту проблему.   -  person Chirag Kothiya    schedule 12.07.2018


Ответы (1)


Изменение размера с хорошим качеством

 - (UIImage *)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
    {
        // Create a bitmap context.
        UIGraphicsBeginImageContextWithOptions(newSize, YES, image.scale);
        [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;

    }
person Abdelahad Darwish    schedule 21.08.2017
comment
Спасибо, но тоже размыто. Не то же качество. - person Asif Raza; 21.08.2017
comment
не может быть такого же качества вообще - person Abdelahad Darwish; 21.08.2017