美文网首页
关于大图显示的痛点,苹果对于大图显示的解决方案:

关于大图显示的痛点,苹果对于大图显示的解决方案:

作者: 林希品 | 来源:发表于2023-05-16 20:30 被阅读0次

1、Objective-C:

// 大图缩小为显示尺寸的图
- (UIImage *)downsampleImageAt:(NSURL *)imageURL to:(CGSize)pointSize scale:(CGFloat)scale {
    // 利用图像文件地址创建 image source
    NSDictionary *imageSourceOptions =
  @{
    (__bridge NSString *)kCGImageSourceShouldCache: @NO // 原始图像不要解码
    };
    CGImageSourceRef imageSource =
    CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, (__bridge CFDictionaryRef)imageSourceOptions);

    // 下采样
    CGFloat maxDimensionInPixels = MAX(pointSize.width, pointSize.height) * scale;
    NSDictionary *downsampleOptions =
    @{
      (__bridge NSString *)kCGImageSourceCreateThumbnailFromImageAlways: @YES,
      (__bridge NSString *)kCGImageSourceShouldCacheImmediately: @YES,  // 缩小图像的同时进行解码
      (__bridge NSString *)kCGImageSourceCreateThumbnailWithTransform: @YES,
      (__bridge NSString *)kCGImageSourceThumbnailMaxPixelSize: @(maxDimensionInPixels)
       };
    CGImageRef downsampledImage =
    CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (__bridge CFDictionaryRef)downsampleOptions);
    UIImage *image = [[UIImage alloc] initWithCGImage:downsampledImage];
    CGImageRelease(downsampledImage);
    CFRelease(imageSource);

    return image;
}

2、Swift

// Downsampling large images for display at smaller size
func downsample(imageAt imageURL: URL, to pointSize: CGSize, scale: CGFloat) -> UIImage {
    let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary
    let imageSource = CGImageSourceCreateWithURL(imageURL as CFURL, imageSourceOptions)!
    let maxDimensionInPixels = max(pointSize.width, pointSize.height) * scale
    let downsampleOptions =
    [kCGImageSourceCreateThumbnailFromImageAlways: true,
    kCGImageSourceShouldCacheImmediately: true,
    kCGImageSourceCreateThumbnailWithTransform: true,
    kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary
 
    let downsampledImage =
    CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions)!
    return UIImage(cgImage: downsampledImage)
}

相关文章

  • 遮罩层的大小的计算方式

    大图显示的比例的计算方法:盛放大图的容器的大小除以大图的大小 遮罩层大小的宽高根据大图显示的比例乘以小图的大小

  • iOS 大图显示

    问题 对于超高分辨率的图片读取存在内存暴涨甚至崩溃的问题, 特别是对于 tableView 中多张图片同时读取的场...

  • iOS项目开发中遇到的问题

    1、加载大图,内存崩溃 问题描述:在加载多张高清大图时,会出现崩溃的现象。解决方案:客户端在显示缩略图时,将宽度大...

  • 性能优化(6.1,长图显示)

    长图大图的显示 长图的显示主要是用区域解码器,复用内存,滑动时改变显示区域我们要处理的是设置图片的复用,设置滑动和...

  • RecyclerView显示系统所有图片表格排列并可选中大图显示

    动画效果如上,主要是获取到系统所有的图片显示出来,在头部大图显示被选中的图片,底部系统图片能上滑覆盖大图,要记录图...

  • 大图显示内存优化

    背景:最近做一个游戏化的项目,项目中会加载许多比较大的场景图。经过测试一张9000*7000高清的png场景图加载...

  • CATiledLayer方式显示大图

    显示大图时,传统加载方法会造成内存暴涨,造成主线程阻塞,甚至造成程序crash。可以使用CATiledLa...

  • 工作笔记七

    关于轮播图控件在安卓环境下不显示的解决方案: constructor(props) { super(prop...

  • javascript鼠标移上图片放大Demo

    效果展实:(鼠标移上显示大图,点击显示原图) ToopTip.js代码: 调用示例

  • 修改微信头像

    1.找到我发给你的照片 看到我发的图片了莫,这个时候点击这张图片会进入大图显示。 2.在大图显示下保存下这张照片 ...

网友评论

      本文标题:关于大图显示的痛点,苹果对于大图显示的解决方案:

      本文链接:https://www.haomeiwen.com/subject/hbubsdtx.html