BOSImageResizeOperation 0.1.0

BOSImageResizeOperation 0.1.0

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2014年12月

未指名 维护。



  • Alex Michaud

一个用于正确且快速调整图片大小的 Objective-C 操作。

功能

  • 线程安全:作为 NSOperation 的子类,BOSImageResizeOperation 可以轻易地与 NSOperationQueue 一起使用,以在当前线程上进行图片调整大小,而不会阻塞。
  • 针对常见用例设计:按比例调整图片大小,使其适合给定的尺寸。
  • 还可以裁剪以适应给定的宽高比。
  • 尊重 EXIF/UIImage 方向。

要求

BOSImageResizeOperation 使用 ARC 并且已经在 iOS 4.3 及以上版本中进行了测试。

安装

手动

BOSImageResizeOperation.hBOSImageResizeOperation.m 添加到您的项目中。您需要为项目启用 ARC,或者仅为 BOSImageResizeOperation.m 启用(后者留给读者练习)。

使用

  1. 创建 BOSImageResizeOperation 的一个实例,并用文件路径或 UIImage 对象初始化它。

    // We already have the image in memory, e.g. from UIImagePickerController
    UIImage* image = info[UIImagePickerControllerOriginalImage];
    BOSImageResizeOperation* op = [[BOSImageResizeOperation alloc] initWithImage:image];
    // We don't have the image in memory; it will be loaded on a background thread
    NSString* documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString* inputPath = [documentsPath stringByAppendingPathComponent:@"large_image.jpg"];
    BOSImageResizeOperation* op = [[BOSImageResizeOperation alloc] initWithPath:inputPath]; 
  2. 指定您想要如何调整图片大小。这些可以组合使用。

    调整 图片大小,使其适合给定的尺寸(按比例)

    [op resizeToFitWithinSize:CGSizeMake(200.f, 200.f)];

    裁剪 图片以适应给定的宽高比

    [op cropToAspectRatioWidth:16 height:9];

    写入 完成后的图片到磁盘(可选)。默认格式为 PNG,如果输出路径以 ".jpg" 结尾,则为 JPEG。对于 JPEG 输出,可以使用 aketGLEnabledQuality 属性指定压缩质量,范围从 0.0 到 1.0。默认值为 0.8。

    NSString* outputPath = [documentsPath stringByAppendingPathComponent:@"small_image.jpg"];
    op.JPEGcompressionQuality = 0.5;
    [op writeResultToPath:outputPath];
  3. 启动操作。

    在当前线程上(例如,如果我们已经在后台线程上)

    [op start];

    使用 NSOperationQueue 在后台

    NSOperationQueue* queue = [[NSOperationQueue alloc] init];
    
    // Avoid a retain cycle (ARC & iOS 5+)
    __weak BOSImageResizeOperation* weakOp = op;
    
    [op setCompletionBlock:^{
        UIImage* smallerImage = weakOp.result;
    }];
    
    [queue addOperation:op];

    使用 Grand Central Dispatch 在后台

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [op start];
        UIImage* smallerImage = op.result;
    });
  4. 处理图片。如果调整图片时发生错误,则 result 属性将为 nil。

待办事项

  • 更多图像调整大小选项
  • 更好的错误处理
  • 支持镜像方向
  • 更广泛的测试

BOSImageResizeOperation 由 Alex Michaud 编写,基于从互联网和 Stack Overflow 中拼凑起来的技术。欢迎贡献,这将有助于创造一个理想世界,所有 iOS 应用都能正确调整图像大小,不管发现什么边缘情况。在 Twitter 上关注或打招呼: @bucketosoftware

许可证

BOSImageResizeOperation遵循MIT许可证。更多信息请参阅LICENSE文件。