新生成的图像质量低 ios swift
new generated image quality is low ios swift
我一直在使用在线教程制作简单的照片应用程序。我制作了上传或捕获图像的应用程序,可以在图像上添加文本并保存。但问题是保存的图像质量很低。它还将应用程序按钮和栏也带到了输出图像中。
这就是我生成最终图像的方式
func save() {
//Create the meme
var meme = Meme( textField: topTextField.text!,textField2: bottomTextField.text!, image:
imageView.image, memedImage: memedImage)
}
func generateMemedImage() -> UIImage
{
// Render view to an image
save()
UIGraphicsBeginImageContext(self.view.frame.size)
self.view.drawViewHierarchyInRect(self.view.frame,
afterScreenUpdates: true)
memedImage =
UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return memedImage
}
@IBAction func saveImage(sender: AnyObject) {
generateMemedImage()
UIImageWriteToSavedPhotosAlbum(memedImage, nil, nil, nil)
}
有质量输出的方法吗?
您没有调整宽高比,您还需要注意视网膜调整大小
Swift 4
func resizeImageWithAspect(image: UIImage,scaledToMaxWidth width:CGFloat,maxHeight height :CGFloat)->UIImage? {
let oldWidth = image.size.width;
let oldHeight = image.size.height;
let scaleFactor = (oldWidth > oldHeight) ? width / oldWidth : height / oldHeight;
let newHeight = oldHeight * scaleFactor;
let newWidth = oldWidth * scaleFactor;
let newSize = CGSize(width: newWidth, height: newHeight)
UIGraphicsBeginImageContextWithOptions(newSize,false,UIScreen.main.scale);
image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height));
let newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage
}
Swift < 4
private func _resizeWithAspect_doResize(image: UIImage,size: CGSize)->UIImage{
if UIScreen.mainScreen().respondsToSelector("scale"){
UIGraphicsBeginImageContextWithOptions(size,false,UIScreen.mainScreen().scale);
}
else
{
UIGraphicsBeginImageContext(size);
}
image.drawInRect(CGRectMake(0, 0, size.width, size.height));
var newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
func resizeImageWithAspect(image: UIImage,scaledToMaxWidth width:CGFloat,maxHeight height :CGFloat)->UIImage
{
let oldWidth = image.size.width;
let oldHeight = image.size.height;
let scaleFactor = (oldWidth > oldHeight) ? width / oldWidth : height / oldHeight;
let newHeight = oldHeight * scaleFactor;
let newWidth = oldWidth * scaleFactor;
let newSize = CGSizeMake(newWidth, newHeight);
return self._resizeWithAspect_doResize(image, size: newSize);
}
使用:
var image : UIImage = yourImageClassInstance.resizeImageWithAspect(image:UIImage(named: "yourImg"),scaledToMaxWidth: 35.0, maxHeight: 45.0);
我一直在使用在线教程制作简单的照片应用程序。我制作了上传或捕获图像的应用程序,可以在图像上添加文本并保存。但问题是保存的图像质量很低。它还将应用程序按钮和栏也带到了输出图像中。
这就是我生成最终图像的方式
func save() {
//Create the meme
var meme = Meme( textField: topTextField.text!,textField2: bottomTextField.text!, image:
imageView.image, memedImage: memedImage)
}
func generateMemedImage() -> UIImage
{
// Render view to an image
save()
UIGraphicsBeginImageContext(self.view.frame.size)
self.view.drawViewHierarchyInRect(self.view.frame,
afterScreenUpdates: true)
memedImage =
UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return memedImage
}
@IBAction func saveImage(sender: AnyObject) {
generateMemedImage()
UIImageWriteToSavedPhotosAlbum(memedImage, nil, nil, nil)
}
有质量输出的方法吗?
您没有调整宽高比,您还需要注意视网膜调整大小
Swift 4
func resizeImageWithAspect(image: UIImage,scaledToMaxWidth width:CGFloat,maxHeight height :CGFloat)->UIImage? {
let oldWidth = image.size.width;
let oldHeight = image.size.height;
let scaleFactor = (oldWidth > oldHeight) ? width / oldWidth : height / oldHeight;
let newHeight = oldHeight * scaleFactor;
let newWidth = oldWidth * scaleFactor;
let newSize = CGSize(width: newWidth, height: newHeight)
UIGraphicsBeginImageContextWithOptions(newSize,false,UIScreen.main.scale);
image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height));
let newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage
}
Swift < 4
private func _resizeWithAspect_doResize(image: UIImage,size: CGSize)->UIImage{
if UIScreen.mainScreen().respondsToSelector("scale"){
UIGraphicsBeginImageContextWithOptions(size,false,UIScreen.mainScreen().scale);
}
else
{
UIGraphicsBeginImageContext(size);
}
image.drawInRect(CGRectMake(0, 0, size.width, size.height));
var newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
func resizeImageWithAspect(image: UIImage,scaledToMaxWidth width:CGFloat,maxHeight height :CGFloat)->UIImage
{
let oldWidth = image.size.width;
let oldHeight = image.size.height;
let scaleFactor = (oldWidth > oldHeight) ? width / oldWidth : height / oldHeight;
let newHeight = oldHeight * scaleFactor;
let newWidth = oldWidth * scaleFactor;
let newSize = CGSizeMake(newWidth, newHeight);
return self._resizeWithAspect_doResize(image, size: newSize);
}
使用:
var image : UIImage = yourImageClassInstance.resizeImageWithAspect(image:UIImage(named: "yourImg"),scaledToMaxWidth: 35.0, maxHeight: 45.0);