几天来,我一直在向这张脸猛击,尽管我一直觉得自己就在启示的边缘,但我根本无法实现我的目标.

在我的设计概念阶段之前,我认为从iPhone的摄像头或库中抓取一张图片,使用一个相当于UIImageView的Aspect Fill选项的函数(完全在代码中)将其缩小到指定的高度,然后将不适合传递的CGRect的任何东西都放入crop off,这将是一件微不足道的事情.

从相机或图书馆获取原始图像是微不足道的.事实证明,其他两个步骤是多么困难,这让我感到震惊.

附图显示了我正在努力实现的目标.请问有没有人能握着我的手?到目前为止,我发现的每个代码示例似乎都会 destruct 图像、颠倒、看起来像垃圾、超出界限,或者就是不能正常工作.

推荐答案

我需要同样的东西-在我的情况下, Select 合适的尺寸,一旦zoom ,然后裁剪两端,以适应睡觉的宽度.(我工作的是风景,所以可能没有注意到肖像模式的任何不足之处.)这是我的代码-它是UIImage上类别的一部分.我的代码中的目标大小始终设置为设备的全屏大小.

@implementation UIImage (Extras)

#pragma mark -
#pragma mark Scale and crop image

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
    UIImage *sourceImage = self;
    UIImage *newImage = nil;    
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;

        if (widthFactor > heightFactor) 
        {
            scaleFactor = widthFactor; // scale to fit height
        }
        else
        {
            scaleFactor = heightFactor; // scale to fit width
        }

        scaledWidth  = width * scaleFactor;
        scaledHeight = 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); // this will crop

    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;

    [sourceImage drawInRect:thumbnailRect];

    newImage = UIGraphicsGetImageFromCurrentImageContext();

    if(newImage == nil)
    {
        NSLog(@"could not scale image");
    }

    //pop the context to get back to the default
    UIGraphicsEndImageContext();

    return newImage;
}

Ios相关问答推荐

SwiftUI@Observable不跟踪父类属性中的更改以更新视图

通过在SWIFT中不起作用的泛型传递协议一致性类型

在iOS 17脉冲符号效果不起作用的情况下制作UIBarButtonItem动画(没有UIImageView)

从后台线程调用DispatchObject的方法安全吗?

在TVOS中访问SWIFT中的objc++函数时发送给类的无法识别的 Select 符

一堆UIGraphics方法在iOS 17中被弃用,没有明确的替代方法?

mapView swift 导致警告有网格错误

AVAudioRecord 没有音频

_SKStoreProductParameterAdNetworkSourceIdentifier未定义符号

为什么这个 init 被分派到一个内部扩展 init?

CoreML 不能并发(多线程)工作?

如何在 SwiftUI 中将选项卡放在滚动视图中?

SwiftUI 图像与下拉视图切换一起 skip

如何将私钥添加到分发证书?

缺少推送通知权利

在 Xcode 5 中为超级视图添加间距约束

针对 Xcode 中的 iPad 选项

正确的领域使用模式/最佳实践?

使用 Xcode 4 的 iPhone 临时构建

闭包不能隐式捕获变异的 self 参数