2

画像を正方形にトリミングしてから、サイズを 200x200 に拡大しようとしています。これが私が使用するコードですが、実際には機能していません。取得した画像の向きが異なる場合や、中央からトリミングされていない場合や、本来よりも幅が広い場合があります。

float scale = _avatar.image.scale;
UIImageOrientation orientation = _avatar.image.imageOrientation;

if(_avatar.image.size.width < _avatar.image.size.height){ // avatar is a UIImageView
    float startingY = (_avatar.image.size.height-_avatar.image.size.width)/2; // image is taller, determine the origin of the width-sized square, which will be the new image
    CGImageRef imageRef = CGImageCreateWithImageInRect([_avatar.image CGImage], CGRectMake(0, startingY, _avatar.image.size.width, _avatar.image.size.width));
    _avatar.image = [UIImage imageWithCGImage:imageRef scale:scale orientation:orientation];
    CGImageRelease(imageRef);
} else {
    float startingX = (_avatar.image.size.width-_avatar.image.size.height)/2; // image is wider, determine the origin of the height-sized square, which will be the new image
    CGImageRef imageRef = CGImageCreateWithImageInRect([_avatar.image CGImage], CGRectMake(startingX, 0, _avatar.image.size.height, _avatar.image.size.height));
    _avatar.image = [UIImage imageWithCGImage:imageRef scale:scale orientation:orientation];
    CGImageRelease(imageRef);
}

UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), YES, 0.0);
[_avatar.image drawInRect:CGRectMake(0, 0, 200, 200)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

正しい結果を得るには、どのように行う必要がありますか?

4

2 に答える 2