2016-09-02 2 views
1

согласно Getting лучшее исполнение Страница,Эффективное понижающей с основным изображением

Использование Core Graphics или функции ввода/вывода, чтобы обрезать или декодируют, такие как функции CGImageCreateWithImageInRect или CGImageSourceCreateThumbnailAtIndex изображения.

Однако мне интересно, насколько это верно, если вы работаете исключительно в Core Image для обработки изображений. Если у меня есть изображение, которое нужно сбрасывать, а затем фильтровать вместе с другими вещами, было бы менее эффективным преобразовать в CGImage, downsample, а затем преобразовать обратно в CIImage для других целей?

Мне интересно, будет ли лучше работать в среде Core Image, если понижающая дискретизация отличается от алгоритма обработки изображений, который вы выполняете. Конечно, если выше это будет быстрее, я бы попробовал, но я не уверен, что есть какой-то другой способ уменьшить что-то как можно быстрее. Нет, к сожалению, CILanczosScaleTransform ужасно медленный, я хочу, чтобы Core Image быстрее использовал встроенные изображения.

ответ

1

Я использую следующий код, который я нашел здесь:

http://flexmonkey.blogspot.com/2014/12/scaling-resizing-and-orienting-images.html

extension UIImage { 
    public func resizeToBoundingSquare(_ boundingSquareSideLength : CGFloat) -> UIImage { 
     let imgScale = self.size.width > self.size.height ? boundingSquareSideLength/self.size.width : boundingSquareSideLength/self.size.height 
     let newWidth = self.size.width * imgScale 
     let newHeight = self.size.height * imgScale 
     let newSize = CGSize(width: newWidth, height: newHeight) 
     UIGraphicsBeginImageContext(newSize) 
     self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)) 
     let resizedImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext(); 
     return resizedImage! 
    } 
} 

После сокращения вещей и/или делая различные размеры пикселей последовательны, я затем использовать CI фильтры, как обычай и цепочка. Я не вижу проблем с производительностью или памятью.

+0

Проблема здесь заключается в том, что ваше расширение работает с UIImages, что означает, что если вы находитесь в середине цепочки, вам нужно сделать преобразование. –

+0

Собственно, нет. Мое приложение выполняет следующую последовательность: Загрузите в UIImage ... downsize ... создайте CIImage ... CIFilter (1) ... CIKernel (1) ... CIKernel (2) ... CIFilter (2) ... UIImage – dfd

Смежные вопросы