2011-12-30 15 views
5

Estoy usando la siguiente secuencia de comandos para guardar imágenes en una carpeta, pero hay una imagen que muestra este mensaje "la imagen no se puede mostrar porque contiene errores".cmyk a rgb usando php

Creo que el problema es algo llamado cmyk y rgb en la imagen, pero cuando busco en la web una forma de convertir cmyk a rgb usando php, no encuentro un ejemplo de cómo hacerlo.

Este es uno de los ejemplos: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/ pero no entiendo cómo usar eso en mi caso.

El enlace de la imagen es algo así como: www.example.com/attachment?id=2290

El guión es el siguiente:

<?php 
$image = 'http://www.dealrush.ie/attachment?id=2290'; 
$name = 'somename'; 
$alt = 'somealt'; 
$saveimage = file_get_contents($image); 
file_put_contents("/usr/local/pem/vhosts/155030/webspace/httpdocs/img/$name.jpg", $saveimage);?> 

Más tarde, en algunas páginas voy a utilizar algo así como esto para mostrar la imagen < img src = " http://www.example.com/img/ <?php echo $name?> .jpg " alt = " <?php echo $alt?> " height = " 127px " width = " 190px "/>

Cualquier ayuda con la conversión de estas imágenes ser apreciado Gracias Daniel

+0

Creo que su archivo de imagen puede estar dañado. – sczizzo

+0

¿Por qué? ¿Qué te hace pensar eso? – user983248

+0

En general, "el archivo XYZ no se puede mostrar porque contiene errores" significa que el archivo XYZ está dañado o tiene una extensión de archivo incorrecta. De cualquier manera, probablemente no sea un problema CMYK-RGB. – sczizzo

Respuesta

4

Dudo que el espacio de color (CMYK o RGB) sea su problema. Aunque todos deberían usar imágenes RGB en la red, los navegadores mostrarán una imagen CMYK sin quejas.

Para convertir la imagen de CMYK a RGB, debe tener instalado un programa de manipulación de imágenes, como ImageMagick, GraphicsMagick o ExactImage. Cualquiera de estos puede hacer lo que quiera, pero debe ser instalado por el administrador del servidor. Si estás haciendo remodelaciones, ImageMagick ya esté instalado, en cuyo caso se podría hacer esto:

$image= '/path/to/your/file.jpg'; 
$i = new Imagick($image); 
$i->setImageColorspace(Imagick::COLORSPACE_SRGB); 
$i->writeImage($image); 
$i->destroy(); 

Tenga en cuenta que ImageMagick es el más poderoso, ExactImage es el más rápido, y es un popular GraphicsMagick de ImageMagick, que es más rápido pero un poco menos potente y tiene algunos errores. Solo se puede usar ImageMagick desde PHP, los demás tienen que ejecutarse con la función exec, aunque eso no es necesariamente algo malo, ya que probablemente manejen su propia memoria y limpieza mucho mejor que PHP.

+0

GraphicsMagick se puede utilizar desde php. [http://www.php.net/manual/en/book.gmagick.php] – Isius

2

CMYK es un método de impresión de imágenes mediante el uso de luz substractiva en lugar de aditivo. Como probablemente sepa, los colores RGB se componen de rojo, verde y azul, y los píxeles del monitor de su computadora o TV emiten esos colores. En la impresión, generalmente se usa papel blanco. Refleja (cerca de) el 100% de la luz roja, verde y azul. Cuando aplica tinta al papel, la tinta absorbe uno o más de esos colores. De modo que la tinta roja absorbe la luz verde y azul que normalmente se reflejaría en el papel. En la impresión utilizan los complementos de rojo, verde y azul. Esos son cian, magenta y amarillo. CMY = Cian, Magenta, Amarillo. La K significa negro. (No usaron B porque el azul en RGB ya es B.) Resulta que es difícil obtener un negro profundo agradable usando tintas cian, magenta y amarillas (además de costosas, ¡tienes que usar las 3!), así que lo agregan un poco de negro puro (que refleja casi sin luz) para que se vea mejor.

Lo que esto significa para usted es que tiene que convertir de CMYK a RGB. Lamentablemente, no hay una sola forma de hacerlo. Si observa algo como Photoshop, primero debe establecer los tipos de tinta y papel que desea emular antes de convertir.

Si tenía CMY puro sin componente negro, puede usar r = 1.0 - c, g = 1.0 - m, b = 1.0 - y y obtener una aproximación razonablemente buena de la imagen. La primera respuesta en this question es una respuesta razonable.

También puede averiguar una conversión en particular que desea utilizar en Photoshop o en alguna otra aplicación y hacer una tabla a partir de eso. He hecho esto antes al crear una imagen que es, digamos, 1024x1024. Cada cuadrado de 32x32 tiene un gradiente con cian en la dirección x yendo de 0 a 1 y magenta en la dirección y yendo de 0 a 1. Luego, de izquierda a derecha, cada cuadrado tiene cantidades crecientes de amarillo, yendo de arriba a abajo, tienen cantidades crecientes de negro en ellos. Cargué la imagen en Photoshop, la convertí a RGB y la guardé nuevamente en un formato sin pérdidas (como TIFF) sin mosaicos, tiras o capas (para facilitar el uso). Luego lo cargo en mi aplicación y lo uso como una tabla de búsqueda para hacer la misma conversión a RGB. Es un poco engorroso la primera vez, pero una vez que haya creado la tabla de conversión, es bastante fácil de usar. Solo uso una interpolación bilineal para generar el valor RGB.