这是我想修剪的图像的一个例子.我想摆脱图像周围的边框(在这种情况下是顶部和底部黑条).

我在Github上找到了一个库:CKImageAdditions,但它似乎不起作用.当我传入UIColor(RGB颜色)时,它只返回相同的图像.
我可以找到许多示例和类别类来修剪UIImage,任何透明像素作为边框,但在这种情况下我需要修剪黑色.我已经对我的图像中的颜色进行了采样,它们的颜色值确实是255,但它似乎与上面的库所寻找的不匹配.
有没有人有他们使用的图书馆或任何见解?我搜索和搜索了CKImageAdditions,这是我唯一可以找到广告用颜色修剪的东西(虽然不幸的是在我的情况下不起作用).
我正在使用照片框架,并创建了一个将滤镜应用于图像的应用程序。现在,我不想应用过滤器,而是想在图像顶部添加文本。这个 API 为我提供了一个CIImage可以用来创建输出的 API CIImage。我只是不知道如何将特定位置的文本添加到CIImage. CGImage如果我是正确的,由于性能下降,不建议将其转换为 a然后添加文本。
如何使用现有的CIImage输出完全相同的内容CIImage(保留原始图像质量)并将文本置于特定位置的顶部?
//Get full image
let url = contentEditingInput.fullSizeImageURL
let orientation = contentEditingInput.fullSizeImageOrientation
var inputImage = CIImage(contentsOfURL: url)
inputImage = inputImage.imageByApplyingOrientation(orientation)
//TODO: REPLACE WITH TEXT OVERLAY
/*//Add filter
let filterName = "CISepiaTone"
let filter = CIFilter(name: filterName)
filter.setDefaults()
filter.setValue(inputImage, forKey: kCIInputImageKey)
let outputImage: CIImage = filter.outputImage*/
//Create editing output
let jpegData: NSData = self.jpegRepresentationOfImage(outputImage)
let adjustmentData = PHAdjustmentData(formatIdentifier: AdjustmentFormatIdentifier, formatVersion: "1.0", data: filterName.dataUsingEncoding(NSUTF8StringEncoding))
let …Run Code Online (Sandbox Code Playgroud) 我需要将a转换CIImage为a CGImage.这是我目前使用的代码:
CGImageRef img = [myContext createCGImage:ciImage fromRect:[ciImage extent]];
Run Code Online (Sandbox Code Playgroud)
但是对于具有常规尺寸的图像,他的代码行非常慢.很慢,我可以正确使用它.是否有另一种来将这些转换更快的方法CIImages来CGImages?
最后我Core Graphics用来画CGImages一个CGContext.如果有一种方法可以直接绘制CIImages到CGContext我认为也应该更快.这可能吗?
谢谢
我目前正在使用旋转图像CGContextDrawImage,但无论何时调用它都会有一个巨大的内存峰值.较新的设备可以处理它,但是具有较低内存的设备(例如iPhone 4s)则不能.该图像是用户在的大文件AVCaptureSessionPresetHigh
我正在使用此扩展名来旋转图像 UIImage
func rotate(orientation: UIImageOrientation) -> UIImage{
if(orientation == UIImageOrientation.Up){return self}
var transform: CGAffineTransform = CGAffineTransformIdentity
if(orientation == UIImageOrientation.Down || orientation == UIImageOrientation.DownMirrored){
transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height)
transform = CGAffineTransformRotate(transform, CGFloat(M_PI))
}
else if(orientation == UIImageOrientation.Left || orientation == UIImageOrientation.LeftMirrored){
transform = CGAffineTransformTranslate(transform, self.size.width, 0)
transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
}
else if(orientation == UIImageOrientation.Right || orientation == UIImageOrientation.RightMirrored){
transform = CGAffineTransformTranslate(transform, 0, self.size.height)
transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
}
if(orientation == UIImageOrientation.UpMirrored || orientation == …Run Code Online (Sandbox Code Playgroud) 如何快速将 a 转换CGImage为 a CVPixelBuffer?
我知道有很多问题试图做相反的事情,还有一些客观的 C 答案,比如这个,但我无法让它们迅速工作。这是我最接近的:
func pixelBufferFromCGImage(image: CGImage) -> CVPixelBuffer {
var pxbuffer: CVPixelBuffer? = nil
let options: NSDictionary = [:]
let width = image.width
let height = image.height
let bytesPerRow = image.bytesPerRow
let dataFromImageDataProvider = image.dataProvider!.data
let x = CFDataGetBytePtr(dataFromImageDataProvider)
CVPixelBufferCreateWithBytes(
kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_32ARGB,
CFDataGetBytePtr(dataFromImageDataProvider),
bytesPerRow,
nil,
nil,
options,
&pxbuffer
)
return pxbuffer!;
}
Run Code Online (Sandbox Code Playgroud)
(这不会编译,因为CVPixelBufferCreateWithBytesUnsafeMutablePointer 除外,并且CFDataGetBytePtr(dataFromImageDataProvider)是UnsafePointer<UIint8>!)
我试图通过cropping(to:)a 上的方法裁剪用 iPhone 相机拍摄的图像的一部分CGImage,但我遇到了一个奇怪的现象,在UIImage转换时我的尺寸加倍.cgImage,这显然阻止了我做我想做的事情。
流程是:
.image现在设置为“屏幕截图”let croppedImage = imageContainerView.renderToImage()
imageContainerView.image = croppedImage
print(imageContainerView.image!.size) //yields (320.0, 568.0)
print(imageContainerView.image!.cgImage!.width, imageContainerView.image!.cgImage!.height) //yields (640, 1136) ??
extension UIView {
func renderToImage(afterScreenUpdates: Bool = false) -> UIImage {
let rendererFormat = UIGraphicsImageRendererFormat.default()
rendererFormat.opaque = isOpaque
let renderer = UIGraphicsImageRenderer(size: bounds.size, format: rendererFormat)
let snapshotImage = renderer.image { _ in
drawHierarchy(in: bounds, afterScreenUpdates: afterScreenUpdates)
}
return snapshotImage
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试覆盖一个 V 形按钮,该按钮将允许用户关闭当前视图。V 形的颜色在深色图像上应为浅色,在浅色图像上应为深色。我附上了我所描述内容的屏幕截图。
然而,当尝试计算图像的亮度/暗度时,会对性能产生重大影响,我这样做(在`CGImage上操作):
var isDark: Bool {
guard let imageData = dataProvider?.data else { return false }
guard let ptr = CFDataGetBytePtr(imageData) else { return false }
let length = CFDataGetLength(imageData)
let threshold = Int(Double(width * height) * 0.45)
var darkPixels = 0
for i in stride(from: 0, to: length, by: 4) {
let r = ptr[i]
let g = ptr[i + 1]
let b = ptr[i + 2]
let luminance = (0.299 * Double(r) + 0.587 * …Run Code Online (Sandbox Code Playgroud) 我有一个CALayer需要显示视频帧.每次渲染一个帧(作为a CGImageRef)时,都会调用此方法:
- (void)displayFrame:(CGImageRef)frame {
[view layer].contents = (id)frame;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这首先不会显示任何东西.每次view调整大小时,frame都会显示一个新的,但直到view再次调整大小.
我该如何解决?
我在故事板中创建了一个带有UIImageView的ViewController.ImageView设置为Aspect Fit并获得黄色背景颜色.
这是我用于测试的照片.
当我运行我的应用程序时,显示的图像如下所示:

没有问题.图像看起来很清晰.现在我在我的viewDidLoad方法中做了以下事情:
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
UIGraphicsBeginImageContext(imageView.image!.size)
imageView.image!.drawInRect(CGRectMake(0, 0, imageView.image!.size.width, imageView.image!.size.height))
var drawedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
imageView.image = drawedImage
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

从图形上下文中绘制图像后,它看起来比以前更加模糊.
从图形上下文中回退时,如何防止图像变得模糊?
我得到了以下访问PHAsset的代码.我需要传递一个CGImage:
let imageManager = PHImageManager.defaultManager()
imageManager.requestImageDataForAsset(self.asset!, options: nil, resultHandler:{
(data, responseString, imageOriet, info) -> Void in
let imageData: NSData = data!
if let imageSource = CGImageSourceCreateWithData(imageData, nil) {
let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)! as NSDictionary
//How do I create a CGImage now?
}
})
Run Code Online (Sandbox Code Playgroud)
我需要提取一个CGImage.遇到麻烦......
cgimage ×10
ios ×7
swift ×7
objective-c ×3
uiimage ×3
ciimage ×2
xcode ×2
c ×1
calayer ×1
cgimageref ×1
cocoa ×1
core-image ×1
iphone ×1
uikit ×1