代码之家  ›  专栏  ›  技术社区  ›  Pavan K

缩放不正确,请调整UIImage大小并导出为jpeg

  •  0
  • Pavan K  · 技术社区  · 6 年前

    您好,我有以下功能可以使用比例因子保存jpg图像

    - (UIImage*) pixelBufferToUIImage:(CVPixelBufferRef) pixelBuffer
    {
        CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
    
        CIContext *temporaryContext = [CIContext contextWithOptions:nil];
        CGImageRef videoImage = [temporaryContext
                                 createCGImage:ciImage
                                 fromRect:CGRectMake(0, 0,
                                                     CVPixelBufferGetWidth(pixelBuffer),
                                                     CVPixelBufferGetHeight(pixelBuffer))];
        UIImage *uiImage = [UIImage imageWithCGImage:videoImage scale:(1/scale_factor) orientation:UIImageOrientationUp];
        CGImageRelease(videoImage);
        return uiImage;
    }
    

    我这样称呼这个方法,

    NSData* image = UIImageJPEGRepresentation([self pixelBufferToUIImage:frame.capturedImage], 0.8);
    [image writeToFile:[self getFilePathWith:folderName and:@"image.jpg"] atomically:NO];
    

    如果我用 scale_factor = 1.0f 这是我得到的原始决议 1280x720 形象

    但是,我想将图像大小减半。我试过设置 scale_factor = 0.5f and 2.0f 两者都不起作用,我得到的jpg的大小为 1280x720

    有人能指出我的错误吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   LGP    6 年前

    文件上说 scale 将改变 size 属性报告。它不会更改图像的像素数据。的内部表示形式 UIImage 仍然具有相同的尺寸。

    规模
    解释图像数据时使用的比例因子。 将比例因子指定为1.0会导致图像的大小 匹配图像的基于像素的尺寸。应用不同的 比例因子更改大小报告的图像大小 所有物

    要缩放图像,您需要自己进行缩放。

    Have a look here how to do it

    所以你可以这样做。将该方法放入类中的链接中,然后在将图像转换为JPEG之前添加缩放调用。

    CGFloat newScale = 0.5;
    UIImage *uiImage = [self pixelBufferToUIImage:frame.capturedImage];
    uiImage = [YourClass imageWithImage:uiImage scaledToSize:CGSizeMake(uiImage.size.width * newScale, uiImage.size.height * newScale)];
    NSData* image = UIImageJPEGRepresentation(uiImage, 0.8);
    [image writeToFile:[self getFilePathWith:folderName and:@"image.jpg"] atomically:NO];