A thin whiteline is been added when resize the image

前端 未结 2 763
盖世英雄少女心
盖世英雄少女心 2021-02-19 02:50

When we resizing the image (after downloading and before storing that in document directory), by the following code:

-(UIImage *)resizeImage:(UIImage *)image wit         


        
2条回答
  •  别跟我提以往
    2021-02-19 03:23

    This code will fix your problem:

    + (UIImage *)scaleImageProportionally:(UIImage *)image {
    
    if (MAX(image.size.height, image.size.width) <= DEFAULT_PHOTO_MAX_SIZE) {
        return image;
    }
    else {
        CGFloat targetWidth = 0;
        CGFloat targetHeight = 0;
        if (image.size.height > image.size.width) {
            CGFloat ratio = image.size.height / image.size.width;
            targetHeight = DEFAULT_PHOTO_MAX_SIZE;
            targetWidth = roundf(DEFAULT_PHOTO_MAX_SIZE/ ratio);
        }
        else {
            CGFloat ratio = image.size.width / image.size.height;
            targetWidth = DEFAULT_PHOTO_MAX_SIZE;
            targetHeight = roundf(DEFAULT_PHOTO_MAX_SIZE/ ratio);
        }
    
        CGSize targetSize = CGSizeMake(targetWidth, targetHeight);
    
        UIImage *sourceImage = image;
        UIImage *newImage = nil;
    
        CGSize imageSize = sourceImage.size;
        CGFloat width = imageSize.width;
        CGFloat height = imageSize.height;
    
        targetWidth = targetSize.width;
        targetHeight = targetSize.height;
    
        CGFloat scaleFactor = 0.0;
        CGFloat scaledWidth = targetWidth;
        CGFloat scaledHeight = targetHeight;
    
        CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);
    
        if (!CGSizeEqualToSize(imageSize, targetSize)) {
    
            CGFloat widthFactor = targetWidth / width;
            CGFloat heightFactor = targetHeight / height;
    
            if (widthFactor < heightFactor)
                scaleFactor = widthFactor;
            else
                scaleFactor = heightFactor;
    
            scaledWidth = roundf(width * scaleFactor);
            scaledHeight = roundf(height * scaleFactor);
    
            // center the image
            if (widthFactor < heightFactor) {
                thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
            } else if (widthFactor > heightFactor) {
                thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
        }
    
        UIGraphicsBeginImageContext(targetSize);
    
        CGRect thumbnailRect = CGRectZero;
        thumbnailRect.origin = thumbnailPoint;
        thumbnailRect.size.width = scaledWidth;
        thumbnailRect.size.height = scaledHeight;
    
        [sourceImage drawInRect:thumbnailRect];
    
        newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        if (newImage == nil) NSLog(@"could not scale image");
    
        return newImage;
    }
    }
    

提交回复
热议问题