Core Graphics proporciona filtros de imagen predeterminados para efectos especiales rápidos. Aquí te mostramos cómo guardar archivos de imagen en Vista Previa para macOS con efectos.
El subsistema de imagen 2D de Core Graphics de Apple (Quartz) proporciona una API de alto rendimiento y consistente para crear, guardar y manipular gráficos. También es responsable de dibujar la mayoría de los textos en las plataformas de Apple (Core Text).
Los textos pueden ser dibujados por Quartz usando precisión de subpíxeles, y anti-aliasing (suavizado) incluso si una pantalla en particular no puede mostrar el texto a la resolución completa calculada.
Quartz es vasto y abarca casi todos los aspectos de la imagen 2D en los sistemas operativos de Apple, incluidos iOS y macOS. Quartz es uno de los frameworks más antiguos de Apple y debutó con Mac OS X en sí.
El modelo de imagen se basa en la composición, en la que varias capas de gráficos se pueden combinar con transparencia (alfa), manipular, transformar, guardar, imprimir o copiar en una pantalla.
El Compositor de Quartz es responsable del ensamblaje y manipulación de imágenes, combinando imágenes y rotando, aplicando transformaciones o dando forma a las imágenes. Una vez que se ensambla una imagen final, el motor de visualización mueve (o ‘blits’) la imagen a una pantalla o impresora.
En el caso de macOS, el Servidor de Ventanas maneja además el ocultamiento y la obstrucción de imágenes para garantizar que las imágenes de visualización destinadas a ventanas específicas permanezcan solo en esas ventanas.
El Servidor de Ventanas de macOS en sí utiliza el Compositor de Quartz al ensamblar el contenido de las ventanas.
Por razones de rendimiento, el Servidor de Ventanas sabe cómo recortar imágenes para que solo se dibujen las partes visibles en las ventanas. Es así como, por ejemplo, cuando haces clic entre ventanas en macOS, partes de las ventanas están ocultas detrás de otras ventanas.
Al recortar imágenes en el momento de la visualización, el Servidor de Ventanas mejora enormemente el rendimiento de renderizado porque no tiene que dibujar el contenido completo de una ventana si parte de ella está oculta.
Cuando Mac OS X se lanzó por primera vez en 2000, el motor gráfico y los frameworks fueron los más avanzados en la industria informática.
Los dispositivos iOS funcionan de manera similar a las Mac, excepto que no utilizan un servidor de ventanas dedicado como lo hace macOS. Ambos utilizan el mismo framework y APIs de Quartz.
Casi todo en las Mac y dispositivos iOS se dibuja utilizando Quartz. Esto incluye imágenes individuales y archivos de imagen, así como la mayor parte de macOS en sí y el contenido de sus ventanas.
En Mac OS X Tiger 10.4, Apple introdujo Quartz 2D Extreme que permite que los gráficos de Quartz se descarguen en una GPU dedicada. En 10.5 Apple renombró Quartz Extreme como QuartzGL.
El Compositor de Quartz también utiliza QuartzGL para acelerar el renderizado si hay una GPU dedicada disponible.
Anteriormente, Apple lanzaba una aplicación llamada Quartz Composer que ahora ha sido descontinuada.
Basado en la geometría
Lo que ves dibujado en pantalla o impreso es solo una aproximación cercana de los gráficos que Quartz realmente calcula. Quartz utiliza modelos matemáticos detrás de escena para calcular los gráficos que va a dibujar, a menos que los gráficos sean una imagen bitmap que exista como una página de píxeles pre-renderizada.
Los modelos matemáticos de tales gráficos a veces se llaman gráficos vectoriales porque se calculan usando geometría primero, independientemente de cómo se mostrarán o imprimirán.
Los gráficos vectoriales tienen la gran ventaja de ser escalables a cualquier tamaño. Para hacer una imagen más grande o más pequeña, simplemente recalcula la imagen a una escala diferente, o aplica una transformación de escala antes de dibujar los gráficos.
Las transformaciones son ajustes matemáticos aplicados a las imágenes para cambiar su tamaño o forma. Cuando giras o deformas una imagen en un programa de edición de imágenes, o cuando manipulas un objeto 3D en el espacio, estás aplicando una transformación al modelo que luego se vuelve a dibujar.
Las transformaciones también se pueden aplicar a imágenes de mapa de bits, aunque esto generalmente resulta en cierta cantidad de distorsión a la imagen original.
Las curvas de Bezier describen gráficos vectoriales curvos, generalmente con un punto de inicio, puntos de control, uno o más grados de curvatura y puntos de forma o “manijas” que se pueden usar para alterar la forma de las curvas. Si alguna vez has usado una aplicación de dibujo vectorial como Adobe Illustrator, probablemente hayas usado las curvas de Bezier para cambiar la forma de los objetos.
Las fuentes, por ejemplo, utilizan la geometría de curvas de Bezier y el dibujo vectorial para describir sus contornos (trazos) que dibujan cada carácter individualmente. Cuando cambias una fuente o el tamaño de la fuente para el texto en un documento en macOS, estás reaplicando un nuevo cálculo para cada carácter dibujado.
Cada archivo de fuente en macOS contiene instrucciones sobre cómo dibujar cada carácter de texto en un determinado tipo de letra.
Servicios de visualización de Quartz
Quartz contiene un subsistema adicional llamado Servicios de Visualización de Quartz (QDS), que se preocupa principalmente por las pantallas de hardware en sí. Originalmente una API muy pequeña, QDS se ha expandido ahora a docenas de APIs que manejan:
Localización e identificación de pantallas
Cambio de propiedades de la pantalla
Establecimiento de todas las configuraciones de pantalla a la vez
Captura de una pantalla
Transmisión de contenidos de pantallas
Uso de efectos de fundido
Alternar la duplicación de la pantalla
Aplicación de gamma y corrección para el color
Recibir actualizaciones de cambios en la pantalla
Si alguna vez has cambiado la resolución de tus pantallas o movido la barra de menú principal a otra pantalla en la aplicación de Configuración del Sistema, has utilizado QDS.
Las aplicaciones de macOS deben incluir código para recibir notificaciones de cambios en la pantalla para poder reconfigurar sus ventanas y contenidos de ventana para las nuevas propiedades de pantalla.
La pantalla conectada que contiene la barra de menú de macOS se llama Pantalla Principal. A cada pantalla macOS le asigna un DisplayID (un CGDirectDisplayID de 32 bits) al inicio.
Tipos de datos
Quartz define su propio conjunto de primitivas de dibujo para usar en cálculos gráficos (que se describen en la documentación de Core Graphics). Estas primitivas incluyen desde números enteros y de punto flotante individuales, formas geométricas como puntos, tamaños y rectángulos, hasta trayectorias, vectores y transformaciones.
También hay contextos de visualización, imágenes (para mapas de bits), capas, además de colores y fuentes. Un contexto de visualización se define como un entorno gráfico en el que se puede dibujar.
Generalmente, cada pantalla tiene un contexto de dibujo, pero también puede haber contextos adicionales fuera de la pantalla y contextos compuestos.
También puedes cambiar las propiedades de los contextos de dibujo para cambiar la apariencia de sus contenidos cuando el contexto se vuelva a dibujar.
La mayoría de estos tipos de datos están compuestos por tipos individuales simples. Por ejemplo, un CGPoint en Quartz se define como una estructura que contiene dos números de punto flotante de doble precisión: una coordenada X y una Y. Un CGPoint describe cualquier punto en una pantalla o contexto.
Un CGRect está compuesto por otros dos tipos de Quartz: un CGPoint (punto de inicio) y un CGSize (dimensiones). El punto de inicio de dibujo en la mayoría de los sistemas de gráficos de computadoras 2D se llama el origen.
Algunos sistemas 2D miden distancias desde la esquina superior izquierda y hacia la derecha y abajo, otros desde la esquina inferior izquierda y hacia la derecha y hacia arriba.
Quartz también define capas (CGLayer) en las que cada una se puede dibujar individualmente, combinar y animar.
Otro framework de Apple llamado Core Animation puede utilizar capas (CALayer) para animar varias capas de gráficos juntas de manera suave.
PDFs
Los archivos PDF se manejan por separado de Quartz en las plataformas de Apple, excepto por su renderizado final para visualización o impresión. Esto se debe a que el PDF era originalmente un estándar de Adobe que utilizaba PostScript para el renderizado.
Las computadoras NeXT tenían un sistema similar basado en PostScript llamado Display Postscript que utilizaba la tecnología de Adobe tanto para la visualización como para el renderizado de impresión. PostScript también utilizaba gráficos vectoriales en sus cálculos gráficos para proporcionar un dibujo suave a cualquier escala.
Aunque el PDF no es una tecnología de Apple, Quartz proporciona un tipo de datos para los PDFs llamado CGPDFDocument. Este tipo de datos obtiene su contenido de otro tipo de Quartz llamado CGDataProvider.
Utilizando estos dos tipos de datos, puedes crear una representación de un documento PDF para visualización o impresión. También puedes inicializar un CGPDFDocument directamente desde un archivo o URL.
CGPSConverter es un tipo de Quartz que se puede utilizar para convertir a y desde PDFs y código PostScript heredado directamente. Las impresoras antiguas tienen PostScript incorporado en sus ROM para que puedan recibir e imprimir archivos PostScript y PDF.
Apple tiene varios otros frameworks para la manipulación de imágenes y archivos, incluidos ImageKit, PDFKit, Quartz Composer (en gran parte descontinuado) y Quick Look.
Quartz y Vista Previa
La aplicación Vista Previa de macOS es esencialmente una aplicación de renderizado de Quartz y PDF, que también sabe cómo mostrar imágenes de mapa de bits.
Vista Previa utiliza Quartz para componer y mostrar archivos e imágenes de la misma manera que lo hace macOS. Puede realizar todos los comandos de dibujo y transformaciones que cualquier otra aplicación de Quartz puede hacer.
También sabe cómo renderizar archivos PDF y PostScript directamente en ventanas, y cómo enviarlos a impresoras láser o de inyección de tinta. Cuando abres un archivo PDF en Vista Previa, utiliza la API de Quartz para renderizar los comandos de dibujo del PDF para que se dibujen en la pantalla del sistema nativo de Apple.
Quartz y Filtros
Una vez que todo esté listo para ser visualizado, se pueden aplicar Filtros de Quartz (CIFilter) para utilizar efectos especiales al mostrar, guardar o imprimir archivos gráficos e imágenes. Los PDFs también pueden tener filtros de imagen aplicados utilizando la tecnología ColorSync de Apple.
Quartz proporciona un conjunto estándar predefinido de filtros, que básicamente aplican efectos fotográficos familiares a las imágenes; pero también se pueden definir y aplicar filtros personalizados. macOS también incluye un Administrador de Filtros que se utiliza para agregar, quitar y gestionar filtros de imagen.
Los CIFilters pueden ser complejos pero se basan en solo dos tipos de datos de Quartz: CIImage y CIContext. Una CIImage es esencialmente un generador de imágenes que toma una imagen existente como entrada o la dibuja en un CIContext para producir una nueva imagen.
No necesitas preocuparte por cómo se modifican las imágenes usando CIFilter, Apple tiene todo ese código incorporado: simplemente seleccionas el filtro que deseas usar e indicas una imagen existente o un contexto de dibujo para modificar y Quartz hace su trabajo.
Esto también estandariza los efectos de filtro para que sean consistentes en el software para las plataformas Mac siempre que se utilice la API de Quartz.
Después de aplicar el filtro seleccionado, se genera una nueva CIImage lista para usar. También se puede aplicar un CIColor a una imagen para cambiar su tono de color general.
Además, Apple proporciona filtros incorporados para cambios geométricos, composiciones, gradientes, efectos de lentes y más. Todos los filtros incorporados están agrupados por categoría usando constantes que comienzan con “CI”. Un grupo llamado CICategoryStylize ofrece varias docenas de formas de hacer que las imágenes parezcan fotografías, periódicos, cómics y vidrieras.
Probablemente hayas visto este tipo de efectos en aplicaciones como Adobe Photoshop.
Ahora hay cientos de filtros de Quartz definidos por Apple, que se detallan en el archivo de encabezado CIFilterBuiltins.h del SDK de Apple. Pero una mejor manera de ver todos los tipos de filtros es visitar el proyecto de documentación de terceros Core Image Filter Reference de Noah Gilmore.
Gilmore también ofrece una aplicación de referencia de cinco estrellas deCore Image para iPad en la App Store llamada CIFIlter.io (5 $) que detalla los filtros incorporados de Apple para ti. Tanto el sitio como la aplicación muestran en qué versiones de iOS y macOS está disponible cada filtro.
Aplicando filtros en Vista Previa
Desafortunadamente, la aplicación Vista Previa de macOS aún no es un editor de imágenes completamente funcional. Aunque puedes realizar algunas operaciones rudimentarias como cambiar el tamaño y rotar, actualmente no admite efectos de filtro generales.
Esto es una lástima, ya que Apple ya suministra todos los filtros en el sistema operativo. Actualmente, todo lo que puedes hacer en Vista Previa es dibujar líneas y formas básicas, ajustar colores y agregar texto.
Lo que puedes hacer en Vista Previa es aplicar un filtro cuando guardas un archivo, pero solo para un pequeño conjunto selecto de filtros predefinidos. De hecho, este