在这里,我正在创建一个典型的图形(它是所有设备上的全屏尺寸)......
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_ACCESS_LOCATION: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
} else {
//user denied permission additionally you can check
//ActivityCompat.shouldShowRequestPermissionRationale if user checked on "do not show again" while clicking deny
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
我需要最终图片为func buildImage()->UIImage
{
let wrapperA:UIView = say, a picture
let wrapperB:UIView = say, some text to go on top
let mainSize = basicImage.bounds.size
UIGraphicsBeginImageContextWithOptions(mainSize, false, 0.0)
basicImage.drawHierarchy(in: basicImage.bounds, afterScreenUpdates:true)
wrapperA.drawHierarchy(in: wrapperA.bounds, afterScreenUpdates:true)
wrapperB.drawHierarchy(in: wrapperB.bounds, afterScreenUpdates: true)
let result:UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// so we've just created a nice big image for some reason,
// no problem so far
print( result?.scale )
// I want to change that image to have a scale of 1.
// I don't know how to do that, so I actually just
// make a new identical one, with scale of 1
let resultFixed:UIImage = UIImage(cgImage: result!.cgImage!,
scale: 1.0,
orientation: result!.imageOrientation)
print( resultFixed.scale )
print("Let's use only '1-scale' images to upload to things like Instagram")
// return result
return resultFixed
// be sure to ask on SO if there's a way to
// just "change the scale" rather than make new.
}
为1 - 但.scale
是一个只读属性。
我唯一知道该怎么做的是制作一个全新的图像副本......但是在创建时将比例设置为1.
有更好的方法吗?
这是出于以下动机:假设您将大图像保存到用户的相册中,并且还允许UIActivityViewController发布到(示例)Instagram。作为一般规则,似乎最好在发送到(示例)Instagram之前制作比例1;如果比例为3,那么你实际上只是在Instagram帖子上获得了左上角1/3的图像。在将其保存到iOS相册方面,将比例设置为1似乎无害(可能在某些方面更好)。(我只说“更好”,如果图像是,例如,最终说通过电子邮件发送给PC上的朋友,如果比例为1,则可以减少混淆。)有趣的是,如果您只是使用iOS相册,并拍摄2或3级图像,并将其分享到Instagram:事实上它确实如此在Instagram上正常显示! (也许Apple的照片确实知道在将其发送到像Instagram这样的地方之前,最好将其缩放为1!)。
答案 0 :(得分:1)
正如您所说,scale
的{{1}}属性是只读的 - 因此您无法直接更改它。
但是,使用UIImage
的{{1}}初始化工具不会真正复制图片 - 它包装的基础UIImage
(包含实际的位图)数据)仍然是同一个实例。它只是一个新的init(cgImage:scale:orientation)
包装器。
尽管如此,在这种情况下,您可以通过直接通过CGImage
的{{3}}方法从上下文中获取UIImage
来剪切中间UIImage
包装器。例如:
CGImage