精华内容
下载资源
问答
  • URL获取图片size

    2021-01-10 04:12:03
    <div><p>加个分类可好,根据URL来获取图片size...仿写微博,结果官方接口没有提供size</p><p>该提问来源于开源项目:ibireme/YYWebImage</p></div>
  • 对于适配博主早已仰慕已久,后来看了Masonry之后,也是对代码约束有了初步了解,慢慢的接触到Swift,就想把约束带进Swift,刚好Masonry的团队也开发了针对Swift约束的SnapKit库,索性就...获取图片size 原先获取图片

    对于适配博主早已仰慕已久,后来看了Masonry之后,也是对代码约束有了初步了解,慢慢的接触到Swift,就想把约束带进Swift,刚好Masonry的团队也开发了针对Swift约束的SnapKit库,索性就练习下,cell自适应在前面有用Object-C写过,但是当时用的是相对布局,也不支持横屏。这里的代码在原基础上采用Swift,改进了一些细节,下面慢慢介绍:

    1.获取图片size
    原先获取图片size是在cell布局时来获取的,而在获取图片size时是要发起网络请求的,so,除了阻塞主线程之外还会让tableview滚动起来奇卡无比,解决的办法就是在下载完数据的时候在下载的线程中直接获取图片的size并存储在字典中备下面使用,因为size有了,不管横竖屏只要有size得到的比例,可以完美适配。

    2.使用原生方法进行请求时要回调主线程刷新UI
    前面博主由有发过怎么用原生的请求方法来访问网络,但是在这个Demo中博主犯了一个低级错误,因为原生请求本身就是一个线程,而博主用第三方的用习惯了,直接在请求完成后刷新tableview,在这个子线程中无疑会阻塞主线程,所以会看到等了好久才刷新出来数据,正确的做法是回到主线程:

     dispatch_async(dispatch_get_main_queue(), {
                    print("OK")
                    self.creatTableView()
                    self._tableView.reloadData()
    
                })

    3.横竖屏时屏幕width和height的变化

    var WIDTH = UIScreen.mainScreen().bounds.size.width
    
    var HEIGHT = UIScreen.mainScreen().bounds.size.height

    获取屏幕宽高有好多种办法,以上只是一种,那么在横屏时以上值是否变化呢?
    实际上博主看了是没有变化的,高度是跟宽有点关系的,所以需要检测当前屏幕的状态了:

    if UIDevice.currentDevice().orientation == .Portrait  
    {
                    width = WIDTH
    }
    else
    {
                    width = HEIGHT
    }
    

    这样一来横竖屏就适配了。
    这里先不放代码了,需要的自行下载:
    https://github.com/codeliu6572/sizeSwift_cellLayout_getImageSizeByURL

    展开全文
  • IOS 获取图片size

    2017-12-06 09:09:04
    // 获取图片size

    // 获取图片的size
    CGSize size = [UIImage imageNamed:@”regStep2_sex”].size;
    // 根据图片url获取图片尺寸
    +(CGSize)getImageSizeWithURL:(id)imageURL
    {
    NSURL* URL = nil;
    if([imageURL isKindOfClass:[NSURL class]]){
    URL = imageURL;
    }
    if([imageURL isKindOfClass:[NSString class]]){
    URL = [NSURL URLWithString:imageURL];
    }
    if(URL == nil)
    return CGSizeZero; // url不正确返回CGSizeZero

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
    NSString* pathExtendsion = [URL.pathExtension lowercaseString];
    
    CGSize size = CGSizeZero;
    if([pathExtendsion isEqualToString:@"png"]){
        size =  [self getPNGImageSizeWithRequest:request];
    }
    else if([pathExtendsion isEqual:@"gif"])
    {
        size =  [self getGIFImageSizeWithRequest:request];
    }
    else{
        size = [self getJPGImageSizeWithRequest:request];
    }
    if(CGSizeEqualToSize(CGSizeZero, size))                    // 如果获取文件头信息失败,发送异步请求请求原图
    {
        NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil];
        UIImage* image = [UIImage imageWithData:data];
        if(image)
        {
            size = image.size;
        }
    }
    return size;
    

    }
    // 获取PNG图片的大小
    +(CGSize)getPNGImageSizeWithRequest:(NSMutableURLRequest*)request
    {
    [request setValue:@”bytes=16-23” forHTTPHeaderField:@”Range”];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if(data.length == 8)
    {
    int w1 = 0, w2 = 0, w3 = 0, w4 = 0;
    [data getBytes:&w1 range:NSMakeRange(0, 1)];
    [data getBytes:&w2 range:NSMakeRange(1, 1)];
    [data getBytes:&w3 range:NSMakeRange(2, 1)];
    [data getBytes:&w4 range:NSMakeRange(3, 1)];
    int w = (w1 << 24) + (w2 << 16) + (w3 << 8) + w4;
    int h1 = 0, h2 = 0, h3 = 0, h4 = 0;
    [data getBytes:&h1 range:NSMakeRange(4, 1)];
    [data getBytes:&h2 range:NSMakeRange(5, 1)];
    [data getBytes:&h3 range:NSMakeRange(6, 1)];
    [data getBytes:&h4 range:NSMakeRange(7, 1)];
    int h = (h1 << 24) + (h2 << 16) + (h3 << 8) + h4;
    return CGSizeMake(w, h);
    }
    return CGSizeZero;
    }
    // 获取gif图片的大小
    +(CGSize)getGIFImageSizeWithRequest:(NSMutableURLRequest*)request
    {
    [request setValue:@”bytes=6-9” forHTTPHeaderField:@”Range”];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if(data.length == 4)
    {
    short w1 = 0, w2 = 0;
    [data getBytes:&w1 range:NSMakeRange(0, 1)];
    [data getBytes:&w2 range:NSMakeRange(1, 1)];
    short w = w1 + (w2 << 8);
    short h1 = 0, h2 = 0;
    [data getBytes:&h1 range:NSMakeRange(2, 1)];
    [data getBytes:&h2 range:NSMakeRange(3, 1)];
    short h = h1 + (h2 << 8);
    return CGSizeMake(w, h);
    }
    return CGSizeZero;
    }
    // 获取jpg图片的大小
    +(CGSize)getJPGImageSizeWithRequest:(NSMutableURLRequest*)request
    {
    [request setValue:@”bytes=0-209” forHTTPHeaderField:@”Range”];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    if ([data length] <= 0x58) {
        return CGSizeZero;
    }
    
    if ([data length] < 210) {// 肯定只有一个DQT字段
        short w1 = 0, w2 = 0;
        [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];
        [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];
        short w = (w1 << 8) + w2;
        short h1 = 0, h2 = 0;
        [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];
        [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];
        short h = (h1 << 8) + h2;
        return CGSizeMake(w, h);
    } else {
        short word = 0x0;
        [data getBytes:&word range:NSMakeRange(0x15, 0x1)];
        if (word == 0xdb) {
            [data getBytes:&word range:NSMakeRange(0x5a, 0x1)];
            if (word == 0xdb) {// 两个DQT字段
                short w1 = 0, w2 = 0;
                [data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)];
                [data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)];
                short w = (w1 << 8) + w2;
                short h1 = 0, h2 = 0;
                [data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)];
                [data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)];
                short h = (h1 << 8) + h2;
                return CGSizeMake(w, h);
            } else {// 一个DQT字段
                short w1 = 0, w2 = 0;
                [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];
                [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];
                short w = (w1 << 8) + w2;
                short h1 = 0, h2 = 0;
                [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];
                [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];
                short h = (h1 << 8) + h2;
                return CGSizeMake(w, h);
            }
        } else {
            return CGSizeZero;
        }
    }
    

    }

    展开全文
  • // 获取图片size

    2018-08-22 15:27:01
    CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;
    
            CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;
    展开全文
  • 在使用Photos框架时获取图片size不准确问题Photos获取系统相册数组获取相册中所有图片对象 在开发中有自定义相册预览需求,就用了Photos框架获取系统中的相册名称和对应图片,因为有图片编辑裁剪需求,要根据图片...

    在使用Photos框架时获取的图片size不准确问题

    在开发中有自定义相册预览需求,就用了Photos框架获取系统中的相册名称和对应图片,因为有图片编辑裁剪需求,要根据图片的size变化编辑框。

    Photos获取系统相册数组

    PHFetchResult * sysfetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil];
        for (PHAssetCollection * assetCollection in sysfetchResult) {
        //相册名称
             NSString * collectionTitle = assetCollection.localizedTitle;
         //获取某个相册的全部图像对象
             NSArray * arr = [self getAssetWithCollection:assetCollection];
            }
    

    获取相册中所有图片对象

    - (NSArray *)getAssetWithCollection:(PHAssetCollection *)collection {
        PHFetchOptions * options = [[PHFetchOptions alloc] init];
        options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
        NSMutableArray * assetArray = [NSMutableArray array];
        PHFetchResult * assetFetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:options];
        
        for (PHAsset * asset in assetFetchResult) {
            [assetArray addObject:asset];
        }
        return assetArray;
    }
    
    

    至此,我们已经可以获取到相册的所有PHAsset对象,在UI展示时,需要根据PHAsset对象去获取UIImage对象,方法如下:

     PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init];
     //是否缩放
      options.resizeMode = PHImageRequestOptionsResizeModeExact;
      //图片质量
        options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;   
         //当图片为icoud资源是否获取,默认No
        options.networkAccessAllowed = NO;
        //是否为同步,默认为no
        options.synchronous = YES;
        
        [[PHCachingImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(width, height) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
    			//当我们拿到了result图像,展示即可
            }];
    

    在获取到目标图像后,发现根据上述方法获取到的图像的size和图像的真实size不符。

    后检查代码发现,在请求image数据时,对于图像是否缩放的配置进行了修改,将缩放属性修改为
    options.resizeMode = PHImageRequestOptionsResizeModeNone即可。

    展开全文
  • 首先我们需要一个指令来追踪input的change。ngChage不适用input[file]。 app.directive("fileread", [function () { return { scope: { selectedFile: "=", changed: '&' }, l...
  • matlab获取图片size属性,长宽

    千次阅读 2017-09-05 15:58:00
    %获取图像宽length=size(imread(‘文件名'),1); %获取图像长 g=imread(['D:\文件及下载相关\桌面\代码 - 副本\代码\Image\Set5\' Names{k}]); g2=im2bw(g,0.5); [dm,dn]=size(g2); batche...
  • // 获取图片size CGSize size = [UIImage imageNamed:@"20170609.png"].size; 获取网络图片的尺寸: // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; ...
  • // 获取图片size CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;  获取网络图片的尺寸: // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil;...
  • 见参考:http://www.lanrenzhijia.com/pic/3194.html 获取图片大小this.files[0].size
  • 首先我们需要一个指令来追踪input的change。ngChage不适用input[file]。 app.directive("fileread", [function () { return { scope: { selectedFile: "=", changed: '&' }, link...
  • NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@... NSLog(@"size =%f =%f",size.width,size.height); 同步请求 会卡!
  • QFont ft = this-&... //获取系统当前字体对象 ft.setPixelSize(15); //设置字体大小 QFontMetrics fm = QFontMetrics(ft); //创建字体计算类 double pixW = fm.width(imageText0); //获取字体占用的宽度...
  • //获取字符串size font:字体 maxsize(最大宽度和最大高度) -(CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize{  NSDictionary *attrs = @{NSFontAttributeName : font};  return [self...
  • //当这个参数为true的时候,意味着你可以在解析时候不申请内存的情况下去获取Bitmap的宽和高 //这是调整Bitmap Size一个很重要的参数设置 options.inJustDecodeBounds = true; BitmapFactory.decodeStream( is,...
  • 获取图片

    2017-01-23 10:08:00
    +(UIImage*)getImageByRetina:(NSString*)imageName ... float nativeWidth= MIN([[UIScreen mainScreen] nativeBounds].size.width,[[UIScreen mainScreen] nativeBounds].size.height); float screen...
  • 获取图片像素

    2020-05-22 15:43:58
    ########获取图片指定像素点的像素 img = Image.open('cropped.jpg') size = img.size w = size[0] h = size[1] img1 = Image.new('RGBA', (w, h), (255, 255, 255, 0)) img2 = Image.new('RGBA', (w, h), (255, 255...
  • 传递一个img对象。 function ShowImage(img) { var pic = document.createElement("img"); pic.src = img.src; alert(pic.width + ", " + pic.height);} 转载于:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,487
精华内容 594
关键字:

获取图片size