gpt4 book ai didi

ios - UIGraphicsBeginImageContext drawInRect不准确

转载 作者:行者123 更新时间:2023-12-01 20:15:03 28 4
gpt4 key购买 nike

我正在使用这种方法来压缩UIImage

if (actualHeight > maxHeight || actualWidth > maxWidth)
{
if(imgRatio < maxRatio)
{
//adjust width according to maxHeight
imgRatio = maxHeight / actualHeight;
actualWidth = imgRatio * actualWidth;
actualHeight = maxHeight;
}
else if(imgRatio > maxRatio)
{
//adjust height according to maxWidth
imgRatio = maxWidth / actualWidth;
actualHeight = imgRatio * actualHeight;
actualWidth = maxWidth;
}
else
{
actualHeight = maxHeight;
actualWidth = maxWidth;
}
}
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality);
UIGraphicsEndImageContext();

但是对于某些 UIImage,在它们的底部,有一条1像素的白线。 关于可能的原因有什么建议吗?
非常感谢!

最佳答案

问题可能是您正在使用CGFloats,并且要对它们进行乘/除,这将导致非整数坐标。

线

actualWidth = imgRatio * actualWidth;


actualHeight = imgRatio * actualHeight;

可能会导致非整数坐标。使用 ceilffloorfroundf对此进行纠正。例如。
actualWidth = ceilf(imgRatio * actualWidth);
actualHeight = ceilf(imgRatio * actualHeight);

没有它会发生什么
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);

可能实际上是 (0,0,24.33, 24.33)您实际上可能正在绘制此大小的矩形,但是图像必须具有
对高度和宽度进行四舍五入的像素数,因此Apple可能会将矩形四舍五入以创建图像上下文。

但是随后他们可能会使用抗锯齿功能对其进行绘制,因此它在视觉上看起来确实像非积分像素。这就是为什么您会得到白线,并且可能还会导致质量下降。

关于ios - UIGraphicsBeginImageContext drawInRect不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953835/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com