菜鸟教程小白 发表于 2022-12-13 06:23:54

ios - 如何根据设备大小和比例调整 UIImage 的大小?


                                            <p><p>我有一个尺寸为 (1008, 669) 的 UIImage 如何根据我的设备尺寸调整它的大小(例如,如果我在 iPhone4s 中查看它,它的宽度将为 640 x 960 ((320 *retina_scale) x (480 *retina_scale))。我正在使用下面的方法,但我的图像只是在 <code>UIImageView</code> 中拉伸(stretch)。如何处理这个?如何使其动态以便它可以工作各种图片?</p>

<pre><code>- (UIImage *) hResizeImage:(UIImage *)image withTargetSize:(CGSize)targetSize {
    CGSize size = image.size;
    CGFloat widthRatio = targetSize.width / image.size.width;
    CGFloat heightRatio = targetSize.height / image.size.height;

    // Figure out what our orientation is, and use that to form the rectangle
    CGSize newSize;
    if(widthRatio &gt; heightRatio) {
      newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio);
    } else {
      newSize = CGSizeMake(size.width * widthRatio,size.height * widthRatio);
    }

    // This is the rect that we&#39;ve calculated out and this is what is actually used below
    CGRect scaledRect = CGRectMake(0, 0, newSize.width * .scale, newSize.height * .scale);

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(scaledRect.size, false, .scale);
    ;
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>由于在 UIGraphicsBeginImageContextWithOptions 中指定了缩放因子,因此在计算 scaledRect 时不需要将宽高乘以屏幕比例。</p>

<p>如果你在 UIGraphicsBeginImageContextWithOptions 中指定 0.0 的值,缩放因子会自动设置为设备主屏幕的缩放因子。</p>

<pre><code>- (UIImage *)hResizeImage:(UIImage *)image withTargetSize:(CGSize)targetSize {
    CGSize size = image.size;
    CGFloat widthRatio = targetSize.width / image.size.width;
    CGFloat heightRatio = targetSize.height / image.size.height;

    // Figure out what our orientation is, and use that to form the rectangle
    CGSize newSize;
    if(widthRatio &gt; heightRatio) {
      newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio);
    } else {
      newSize = CGSizeMake(size.width * widthRatio,size.height * widthRatio);
    }

    // This is the rect that we&#39;ve calculated out and this is what is actually used below
    CGRect scaledRect = CGRectMake(0, 0, newSize.width, newSize.height);

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(scaledRect.size, false, 0.0f);
    ;
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何根据设备大小和比例调整 UIImage 的大小?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29642587/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29642587/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何根据设备大小和比例调整 UIImage 的大小?