Как вы сказали, текущие возможности Core Image немного ограничены на iOS. В частности, разочаровывает отсутствие пользовательских ядер, которые вы найдете на рабочем столе. Другие альтернативы, которые вы перечисляете (за исключением GLImageProcessing, который не сможет выполнять такую фильтрацию), являются библиотеками, привязанными к ЦП, и будут слишком медленными для выполнения фильтрации в реальном времени на мобильном устройстве.
Однако я могу указать вам на платформу с открытым исходным кодом под названием GPUImage, которую я только что развернул, потому что не мог не найти что-то, что позволит вам реализовать пользовательские эффекты. Как следует из названия, GPUImage выполняет ускоренную на GPU обработку неподвижных изображений и видео с использованием шейдеров OpenGL ES 2.0. Вы можете написать свои собственные эффекты, используя их, так что вы сможете делать практически все, что только сможете придумать. Сам фреймворк представляет собой Objective-C и имеет довольно простой интерфейс.
В качестве примера фильтра искажения следующий шейдер (на основе кода в ответе Дэнни Пфлюгхофта) выполняет своего рода эффект рыбьего глаза:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
const mediump float bulgeFactor = 0.5;
void main()
{
mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5);
mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y;
mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5);
gl_FragColor = texture2D(inputImageTexture, distortedCoordinate);
}
Это производит такой эффект на видеопоток:
В моих тестах GPUImage обрабатывает изображения в 4 раза быстрее, чем Core Image на iPhone 4 (в 6 раз быстрее, чем обработка, связанная с ЦП), а видео — в 25 раз быстрее, чем Core Image (в 70 раз быстрее, чем на ЦП). Даже в худшем случае, который я мог бы использовать, он соответствует Core Image по скорости обработки.
Фреймворк все еще довольно новый, поэтому количество стандартных фильтров, которые у меня сейчас есть, невелико, но я скоро добавлю еще кучу. Тем временем вы можете написать свои собственные шейдеры искажения для обработки ваших изображений, а исходный код для всего доступен для настройки по мере необходимости. моя вступительная статья об этом содержит более подробную информацию о том, как использовать это в своих приложениях.
person
Brad Larson
schedule
17.02.2012