Saltar al contenido principal
Library homepage
 
LibreTexts Español

5.2: Procesamiento de imágenes ráster

  • Page ID
    154258
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    El procesador de imágenes raster (RIP) es la tecnología central que realiza el trabajo computacional para convertir la amplia gama de datos que utilizamos para crear un gráfico de computadora en los datos de un bit que impulsa un dispositivo de imagen física. Examinemos la creación de un solo carácter del alfabeto, o glifo. Un archivo de fuente entrega lenguaje PostScript al RIP que describe una serie de puntos y curvas vectoriales entre esos puntos para delinear la letra A. El RIP tiene una cuadrícula matricial a la resolución del dispositivo de salida y calcula qué puntos en la cuadrícula se activan y cuáles se apagan para crear la forma de esa letra A en el dispositivo de salida. Los puntos en la cuadrícula solo se pueden activar o desactivar —que es como se codifican los datos binarios— ya sea como 0 o 1. Luego, la rejilla actúa como un interruptor para encender o apagar una parte mecánica del motor de imágenes.

    Con la tecnología de computadora a placa para la producción de planchas de impresión litográfica, se utiliza un láser para exponer una emulsión sobre una plancha de impresión. La mayoría de los colocadores de placas tienen una resolución de 2,000 a 3,000 lspi (puntos láser por pulgada). El RIP calcula todos los puntos que deben ser activados para crear el gráfico que será fotografiado en la plancha de impresión. Si la imagen llena una prensa típica alimentada por hojas, es (30 pulgadas x 3,000 lspi) x (40 pulgadas x 3,000 lspi) = 1.08 billones, lo que toma 10 gigabytes de memoria de computadora para almacenar y transferir. Una plancha de impresión para la producción de impresión flexográfica se crea al encender y apagar un láser a una resolución ligeramente menor. Una impresora de inyección de tinta utiliza el mismo proceso RIP para entregar los mismos datos de un bit a cada boquilla de inyección de tinta para cada color de tinta en la impresora. La mayoría de los motores de inyección de tinta tienen una resolución entre 600 y 1,200 puntos por pulgada, por lo que la cuadrícula de matriz es más pequeña, pero si se trata de una impresora de ocho colores, los datos de las ocho boquillas deben sincronizarse y entregarse simultáneamente. Una impresora electofotográfica (Xerox) generalmente tiene una resolución similar a una impresora de inyección de tinta y utiliza un proceso RIP similar para cambiar una cuadrícula de cargas electrostáticas a positiva o negativa en un tambor electrostático que es el tamaño máximo de medio que la máquina puede obtener imágenes. Cada color de la impresora tiene una imagen rasterizada separada que carga el tambor en el lugar correcto para atraer ese color de tóner a esa ubicación exacta. Los datos de cada color deben estar sincronizados para la entrega simultánea. Los datos deben refrescar la carga en el tambor después de cada impresión con el fin de recoger nuevo tóner. Ese es un dato muy importante para recordar cuando hablamos de personalizar la impresión con datos variables más adelante en este capítulo.

    Esta comprensión básica del lugar de RIP en un flujo de trabajo gráfico por computadora es esencial para comprender cómo preparar archivos para, y administrar, recursos RIP. También es esencial para resolver algunos de los problemas comunes que vemos en diversos RIP. Cuando comparamos las dos tecnologías de imagen de producción masiva, litografía y flexografía, con las tecnologías de imagen personalizadas, electrofotografía e inyección de tinta, podemos identificar algunas similitudes centrales. En litografía y flexografía, se utiliza un láser de alta potencia para alterar una emulsión física que es duradera y lo suficientemente finamente granulada como para dejar que la imagen láser sea un punto de tres milésimas de pulgada sin afectar al punto de igual tamaño junto a él. Podemos obtener imágenes confiables de ese punto en una serif de un glifo establecido en un tipo de punto o un cabello en una cara en una foto que se imagina con un patrón de detección de frecuencia modulada (FM) de 5 micrones. La tecnología de producción en masa nos asegura que la primera impresión será idéntica a la impresión millonésima.

    La cuadrícula ráster de datos de un bit que produce el RIP debe entregarse al tambor de imagen o a la boquilla de inyección de tinta para cada imagen que se produzca con una impresora de inyección de tinta o un motor electrofotográfico. Esto es lo que nos permite hacer que cada imagen sea diferente y personalizarla para la persona a la que le estamos entregando la imagen. También hace que el proceso sea más lento y menos confiable para la producción en masa. El RIP produce una cuadrícula ráster de menor resolución, por lo que el detalle en fotos y formas de letras no es tan preciso. Podemos tener un RIP descarte datos si tenemos demasiados detalles para la cuadrícula ráster que está produciendo. El RIP no hace un buen trabajo de interpolación de más datos para producir detalles adicionales en una foto o forma gráfica si falta esa información para empezar.

    Eso nos lleva a examinar los recursos que debe tener un RIP para producir un ráster perfecto para cada forma gráfica que renderiza, y para cada color que se reproduce. El recurso que consume un RIP son los datos. En la industria de las comunicaciones gráficas, todos deberíamos usar playeras que digan '¡ Cerdos para los datos! ' sólo para distinguirnos de nuestros compañeros de medios que están produciendo gráficos por computadora para medios electrónicos. Si pensamos en un RIP como una línea de ensamblaje automático que estamos alimentando con piezas, en forma de archivos en diferentes formatos de datos, nos ayudará a entender cómo hacer que un RIP sea más eficiente. Si alimentamos demasiadas piezas en la línea de ensamblaje, es más fácil tirar algunas piezas que detenerse y recrear una pieza que falta. Si alimentamos la línea de montaje con cinco veces más piezas necesarias para hacer un automóvil, aún es más eficiente tirar las piezas que detener y recrear una pieza faltante.

    Si aplicamos esta analogía a la resolución de imágenes, podemos señalar ejemplos en los que los diseñadores reutilizan regularmente las imágenes de una página web para utilizarlas en una portada de libro o impresión de póster. La página web necesita entregar la foto a través de una red rápidamente y solo necesita llenar una pantalla de computadora típica con suficiente detalle para representar la foto. Una resolución fotográfica típica para hacerlo correctamente es de 72 píxeles por pulgada. Ahora recuerda que la cuadrícula raster para una imprenta litográfica que imprimirá la portada del libro es de 3,000 lspi. ¡Nuestro RIP necesita muchos más datos de los que contiene la imagen de la página web! La mayoría de las fotos que estamos reproduciendo hoy son capturadas con dispositivos electrónicos: cámaras digitales, teléfonos, escáneres o dispositivos de mano. La mayoría almacena los datos con algún tipo de compresión para reducir los datos que el dispositivo tiene que almacenar y transferir. Sin embargo, esas eficiencias se detienen en el RIP, ya que este motor computacional tiene que descomprimir los datos antes de aplicarlos a la página gráfica que está rasterizando. Es como romper un volante en cables, pernos y fundas de plástico que encajan de manera eficiente en un paquete de envío de una pulgada cuadrada, y poner este volante de 'muebles IKE' en una línea de producción de automóviles para que el ensamblador se ocupe en dos puntos y dos minutos.

    Por otro lado, podemos capturar una foto digital a 6,000 píxeles por pulgada (ppi) y usarla en una página escalada a la mitad de la dimensión original. ¡Eso es como empacar un volante terminado en 10 yardas de plástico de burbujas y colocarlo en la línea de montaje en una caja de envío de madera! Por lo que es importante que los diseñadores presten atención a la resolución del dispositivo de imagen final para determinar la resolución que producirá el RIP a partir de los archivos gráficos que está procesando.

    Cribado de semitonos

    Es importante detenerse aquí para una discusión sobre el cribado de semitonos que un RIP aplica a fotografías y gráficos para representar niveles de gris o valores tonales en un elemento gráfico. Describimos cómo el RIP hace una cuadrícula de datos de un bit, pero los gráficos no son solo en blanco y negro — tienen valores tonales desde 0% (nada) de impresión hasta 100% (sólida) de impresión. Si queremos renderizar los valores tonales intermedios en incrementos de medio porcentaje, necesitamos 200 direcciones para registrar los diferentes valores. Los datos de la computadora se registran en bits, dos valores (encendido y apagado) y bytes, que son ocho bits encadenados en un conmutador. El número de valores que un byte puede registrar es 256, el número de combinaciones de encendido y apagado que pueden expresar los ocho bits en el byte. Una computadora registra un byte de datos para cada color primario (rojo, verde y azul — RGB) para cada detalle de una foto, como un píxel (elemento de imagen), que controla los fósforos en los dispositivos electrónicos de imágenes. Un RIP debe convertir los valores RGB de ocho bits en los cuatro colores primarios de tinta de impresión (cian, magenta, amarillo y negro — CMYK). Aquí hay dos pasos distintos: (1) conversión de datos de tono continuo RGB a CMYK (RGB de 24 bits a CMYK de 32 bits); y (2) algoritmos de cribado de tono continuo a un bit. Tenemos que estar en el espacio de color de salida antes de poder aplicar la conversión de un bit. Convierte los valores tonales de ocho bits en datos de un bit dividiendo el área en celdas que pueden renderizar diferentes tamaños y formas de puntos activando y apagando puntos en la celda. Una celda con una cuadrícula que tiene 10 puntos láser de ancho por 10 puntos láser de profundidad puede renderizar diferentes tamaños de 100 puntos (10 x 10), de 1% a 99%, activando más y más de los puntos láser para imprimir. Si pensamos en el colocador de placas para la fabricación litográfica de planchas, sabemos que es capaz de disparar el láser 2,000 a 3,000 veces por pulgada. Si las celdas que componen nuestros puntos de impresión son 10 puntos cuadrados, podemos hacer tamaños de punto que tengan una resolución de 200 a 300 puntos de semitono tamizados en una pulgada. Un RIP tiene algoritmos de cribado (creación de celdas de puntos) que convierten los datos entregados en píxeles RGB a 300 píxeles por pulgada en racimos de puntos láser (puntos) para cada color primario de impresión (CMYK).

    Esta descripción de cómo un RIP procesa los datos fotográficos de una cámara digital puede ayudarnos a entender por qué es importante capturar y entregar suficiente resolución al RIP. Debe desarrollar una representación detallada de la foto en un punto apantallado de semitono que utilice todos los puntos láser disponibles. La regla básica es: PPI requerido = 2 x líneas por pulgada (LPI) al tamaño final. Entonces, si necesitas imprimir algo a 175 líneas por pulgada, debe tener una resolución de 350 píxeles por pulgada en el tamaño final a escala de la reproducción. Use esta regla si su proveedor de servicios de impresión no le da una dirección explícita. Puede usar un valor predeterminado de 400 ppi para la detección de FM donde el lpi no sea relevante.

    WYSIWYG

    Es importante saber que cada vez que vemos un gráfico de computadora en la pantalla de nuestra computadora, es la imagen de la pantalla a través de un proceso RIP. El RIP puede cambiar de un programa de software a otro. Es por ello que algunos archivos PDF se ven diferentes cuando los abres en el programa Preview suministrado con un sistema operativo Apple que cuando se abren en Adobe Acrobat. Los gráficos se están procesando a través de dos RIP diferentes. Lo mismo puede suceder cuando la imagen se procesa a través de dos impresoras diferentes. El reto es predecir de manera consistente cómo se verá la imagen impresa viéndola en la pantalla de la computadora. Utilizamos el acrónimo WYSIWYG (lo que ves es lo que obtienes) para referirnos a imágenes que se reproducirán consistentemente en cualquier dispositivo de salida. Los diseñadores se han enfrentado a tres desafíos importantes al tratar de lograr WYSISYG desde la llegada de la autoedición a principios de los 80.

    El primer reto fue la tipografía por imágenes con fuentes PostScript. El segundo fue el manejo de color de pantallas de computadora y dispositivos de salida con perfiles ICC. El tercer y actual desafío está en la obtención de imágenes de efectos transparentes predeciblemente de un dispositivo de salida a otro. Los problemas de fuentes siguen siendo la causa más común de error en el procesamiento de documentos del cliente para todas las tecnologías de imagen. Veamos ese problema en profundidad antes de abordar los otros dos retos para lograr el WYSIWYG.

    Administración de fuentes

    El desarrollo del lenguaje de computadora PostScript fue pionero por Adobe en la creación de los primeros archivos de fuentes independientes del dispositivo. Esta invención permite a los consumidores escribir sus propios documentos en computadoras personales e imágenes de sus documentos en impresoras láser en diversas resoluciones. Para lograr WYSIWYG en pantallas de computadoras personales, los archivos de fuentes necesitaban dos partes: fuentes de pantalla y fuentes de impresora. Las fuentes de pantalla eran mapas de bits que imaginaban las formas de las letras (glifos) en la pantalla de la computadora. Las fuentes de impresora eran descripciones vectoriales, escritas en código PostScript, que tenían que ser procesadas por un RIP a la resolución de la impresora. Los glifos se veían significativamente diferentes cuando se fotografiaban en una impresora láser de 100 dpi que en una impresora de 600 dpi, y ambos eran bastante diferentes de lo que los artistas gráficos/tipógrafos vieron en la pantalla de su computadora. Eso no fue sorprendente ya que las formas fueron captadas por archivos de computadora completamente diferentes —un ráster, un vector— a través de diferentes procesadores RIP, en dispositivos muy diferentes. Muchos diseñadores gráficos aún no se dan cuenta de que cuando usan la arquitectura de fuentes tipo Adobe deben proporcionar tanto la fuente de pantalla raster como la fuente vectorial PostScript a otra computadora si quieren que el documento que utiliza esa fuente procese correctamente a través del RIP. Este fue un problema tan común con los primeros usuarios de fuentes de Adobe que Microsoft lo convirtió en el primer problema que resolvieron al desarrollar la arquitectura de fuentes TrueType para competir con las fuentes de Adobe. Las fuentes TrueType aún contenían datos de mapa de bits para dibujar los glifos en la pantalla de una computadora y datos vectoriales PostScript para entregarlos a un RIP en un motor de impresión. Sin embargo, el archivo de fuente TrueType es un archivo único que contiene datos ráster y vectoriales. Las fuentes TrueType se distribuyeron ampliamente con todo el software de Microsoft. Microsoft también compartió las especificaciones para la arquitectura de fuentes TrueType para que los usuarios pudieran crear y distribuir sus propias fuentes. Los problemas con el mantenimiento de archivos de fuente de pantalla con archivos de fuente de impresora desaparecieron cuando los creadores de gráficos usaban fuentes TrueType.

    La calidad de las fuentes se dio un chapuzón a medida que más gente desarrollaba y distribuía sus propios archivos de fuentes, sin conocimiento de lo que hace una buena fuente, y qué puede crear estragos en un RIP. Hoy en día, hay miles de fuentes TrueType gratuitas disponibles para descargar desde una multitud de sitios web. Entonces, ¿cómo identifica un diseñador una buena fuente de una mala fuente? La forma más fácil es establecer algunos glifos complicados en un programa como Adobe InDesign o Illustrator y usar una función de 'convertir a outlines' en el programa. Esto mostrará los nodos y curvas bezier que crean el glifo. Si hay muchos nodos con pequeños segmentos de línea recta entre ellos, la fuente puede causar problemas en un RIP. Recuerde que PostScript estaba destinado a ser un lenguaje de programación independiente de dispositivos escalables. Si los glifos mal hechos se escalan demasiado pequeños, el RIP tiene que calcular demasiados puntos a partir de las posiciones de los nodos y termina eliminando muchos puntos que son más finos que la resolución de la imagen ráster. Por otro lado, si el glifo se escala demasiado grande, las líneas rectas entre puntos hacen que las formas de curva suave sean cuadradas y de aspecto troceado. Estas fuentes generalmente se crean dibujando a mano las formas de las letras, escaneando los dibujos y trazándolos automáticamente en un programa como Illustrator. La prueba de 'convertir a outlines' revela el rastreo automático de inmediato, y es una buena idea buscar otra fuente para un tipo de letra similar de una fundición de fuentes de mayor reputación.

    Otra buena prueba es observar los valores de kerning que están programados en el archivo de fuente. Los pares de kerning son formas de glifos que necesitan que el espacio entre ellos se apriete (disminuya) cuando aparecen juntas. Una buena fuente suele tener entre 600 y 800 valores de par de kerning programados en su archivo. El par más común que necesita kerning es una 'T' mayúscula emparejada con una 'o' minúscula (To). El glifo 'o' debe estar metido debajo de la barra transversal de la T, lo que se hace programando un espacio de letras negativas en el archivo de fuente para tener menos escape cuando el motor de imágenes pasa de renderizar la primera forma a cuando comienza a obtener imágenes de la segunda forma. Si establecemos el par de letras y colocamos el curser en el espacio entre ellos, debería aparecer un valor de kerning negativo en la herramienta de kerning. Si no aparece ningún valor de kerning, la fuente suele ser mala y causará problemas de espaciado en el documento en el que se utiliza.

    Otro problema común ocurrió al combinar fuentes Adobe Type 1 con fuentes TrueType en el mismo documento. Adobe fue el creador del lenguaje de programación PostScript, y aunque fue bastante fácil copiar su código y crear fuentes similares, Adobe ha mantenido un control bastante estricto sobre las licencias de los motores de interpretación PostScript que determinan cómo se renderiza el código PostScript a través de un procesador de imágenes raster. El RIP almacena las formas de glifos en un archivo de fuente en una matriz a la que se puede acceder rápidamente al renderizar los glifos. A cada glifo se le asigna una dirección en la matriz, y cada matriz de fuente tiene asignado un número único para que el RIP pueda asignar una matriz de renderización única. Adobe pudo realizar un seguimiento de sus propios números de identificación de fuentes, pero no pudo controlar los ID de fuente que se asignaron a las fuentes TrueType. Si una fuente TrueType tuviera el mismo número de ID de fuente que la fuente Adobe Type 1 utilizada en un documento, el RIP establecería la matriz de glifos a partir de la primera fuente que procesó y usaría la misma matriz para la otra fuente. Así que los documentos se renderizaron con una fuente en lugar de dos, y los glifos, el espaciado de palabras, los finales de línea y los saltos de página se vieron afectados y renderizados incorrectamente. En su mayor parte, este problema se ha resuelto con la creación de un registro central para los números de ID de fuente; sin embargo, todavía hay archivos de fuentes TrueType más antiguos en el universo de Internet que generarán conflictos de ID de fuente en un RIP.

    Adobe, Apple y Microsoft continuaron compitiendo por el control del mercado de la autoedición al tratar de mejorar las arquitecturas de fuentes y, como resultado, muchos sistemas confusos evolucionaron y se descartaron cuando causaron más problemas en los RIP de los que resolvieron. Hay un error de fuente común que todavía causa problemas cuando los diseñadores usan fuentes Adobe Type 1 o fuentes TrueType. La mayoría de estas fuentes solo tienen direccionamiento de ocho bits y, por lo tanto, solo pueden contener 256 glifos. Se necesita un archivo de fuente separado para establecer una versión en negrita o cursiva del tipo de letra. Algunos programas de diseño de página permitirán al diseñador aplicar atributos en negrita o cursiva a los glifos, y renderizar artificialmente las formas negrita o cursiva del documento en la pantalla de la computadora. Cuando el documento se procesa en el RIP, si la fuente que contiene los glifos negrita o cursiva no está presente, el RIP o bien no aplica el atributo, o bien sustituye una fuente predeterminada (generalmente Courier) para alertar a los correctores de que hay un error de fuente en el documento. Las terminaciones de línea y los saltos de página se ven afectados por el error, y la placa de impresión, la señalización o la impresión generada se convierten en basura a un gran costo para la industria.

    Para resolver este problema, Adobe realmente cooperó con Microsoft y Apple en el desarrollo de una nueva arquitectura de fuentes. Las fuentes OpenType tienen direccionamiento unicode, lo que les permite contener miles de glifos. Las familias enteras de tipos de letra se pueden vincular entre sí para permitir que los diseñadores apliquen sin problemas múltiples atributos, como cursiva negrita condensada al tipo de letra, y hacer que el RIP procese el documento muy de cerca a lo que los tipográficos ven en la pantalla de su computadora. PostScript también es el lenguaje interno de la mayoría de los programas de diseño de página, por lo que los mismos archivos de fuente OpenType se utilizan para rasterizar los glifos a la pantalla como el RIP de la impresora está usando para generar la salida final. Puede haber diferencias significativas en el software RIP, pero muchos problemas de fuentes se resuelven mediante el uso de fuentes OpenType para la creación de documentos.

    Un error de fuente común aún persiste en la industria de las comunicaciones gráficas que subraya agudamente la diferencia entre crear un documento en la computadora de un solo usuario pero procesarlo a través de la estación de trabajo de un fabricante de imágenes. Los diseñadores suelen poseer un conjunto específico de fuentes que utilizan para todos los documentos que crean. El fabricante intenta usar el archivo de fuente exacto que cada diseñador suministra con el documento. El problema nuevamente involucra el número de ID de fuente, ya que cada archivo de fuente activado en un sistema operativo se almacena en caché en la memoria RAM para agilizar el proceso de RIP a pantalla. Por lo que los archivos de fuente que recibe el fabricante pueden ser diferentes versiones de la misma fuente creados en diferentes momentos, pero asignados el mismo número de ID de fuente. Por ejemplo, un diseñador usa una versión de 1995 del tipo de letra Helvetica de Adobe y otro usa una versión 2015, pero los dos tipos de letra tienen el mismo número de ID de fuente. El sistema operativo del fabricante no sobrescribirá la primera matriz de fuentes que almacenó en caché en la RAM, por lo que es el primer archivo de fuentes que renderiza el documento en pantalla y se enviará al RIP. Por lo general, hay pocos cambios notables en las formas de los glifos. Pero es común que las fundiciones de fuentes ajusten los valores de kerning entre pares de letras de una versión a la siguiente. Entonces, si un fabricante tiene la versión incorrecta del archivo de fuente almacenada en caché en la RAM, un documento puede tener cambios de finalización de línea y reflujos de página. Este es un error difícil de atrapar. Hay programas y rutinas que el fabricante de imágenes puede implementar para borrar la memoria caché de RAM, pero muchas veces, se genera más 'basura' antes de que se diagnostique el problema. La creación moderna de PDF generalmente incluye la producción de un paquete de subconjunto de fuentes etiquetadas de manera única que solo contiene los glifos utilizados en el documento. El ID de subconjunto de fuentes único evita la posibilidad de conflictos de ID de fuente.

    Administrar fuentes en una computadora de un solo usuario tiene sus propios desafíos, y Apple ha incluido Font Book con sus sistemas operativos para ayudar a administrar fuentes en aplicaciones en un sistema operativo Apple. Adobe ofrece Typekit con su último software Creative Cloud para proporcionar un mayor acceso a una amplia variedad de tipos de letra desde una fundición confiable. Programas de administración de fuentes de terceros como Suitcase Fusion también ayudan a los artistas gráficos a administrar sus fuentes para reutilizar sus documentos de manera efectiva. Sigue siendo responsabilidad de los operadores individuales saber cómo usar las fuentes en sus documentos. También deben asegurarse de que las fuentes estén licenciadas y empaquetadas para entregarlas a otros sistemas informáticos para que puedan manejar muchos RIP diferentes en una amplia variedad de dispositivos de salida.


    This page titled 5.2: Procesamiento de imágenes ráster is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by Graphic Communications Open Textbook Collective (BCCampus) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.