2011-12-30 10 views
5

Sto utilizzando il seguente script per salvare le immagini su una cartella, ma c'è un'immagine che mostra questo messaggio "l'immagine non può essere visualizzata perché contiene errori".cmyk a rgb utilizzando php

Penso che il problema sia qualcosa chiamato cmyk e rgb sull'immagine, ma quando si cerca sul Web in modo tale da convertire cmyk in rgb usando php non riesco a trovare un esempio di come farlo.

Ecco un esempio: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/ ma io non capirne come utilizzare che nel mio caso.

Il link per l'immagine è qualcosa di simile: www.example.com/attachment?id=2290

Lo script è il seguente:

<?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);?> 

Più tardi in alcune pagine che è possibile usare qualcosa di simile questo per mostrare l'immagine. < img src = " http://www.example.com/img/ <?php echo $name?> .jpg " alt = " <?php echo $alt?> " height = " 127px " width = " 190px "/>

Qualsiasi aiuto con la conversione di queste immagini saranno essere apprezzato Grazie Daniel

+0

Penso che il tuo file immagine potrebbe essere solo corrotto. – sczizzo

+0

Perché?, Cosa ti fa pensare che? – user983248

+0

In genere, "il file XYZ non può essere visualizzato perché contiene errori" significa che il file XYZ è corrotto o ha l'estensione di file errata. In entrambi i casi, probabilmente non è un problema RGB CMYK. – sczizzo

risposta

4

Dubito che lo spazio colore (CMYK o RGB) sia il tuo problema. Anche se tutti dovrebbero usare le immagini RGB sulla rete, i browser visualizzeranno comunque un'immagine CMYK senza lamentarsi.

Per convertire l'immagine da CMYK a RGB, è necessario disporre di un programma di manipolazione immagini, ad esempio ImageMagick, GraphicsMagick o ExactImage. Ognuno di questi può fare ciò che vuoi, ma deve essere installato dall'amministratore del server. Se sei fortunatamente, ImageMagick potrebbe essere già installato, nel qual caso si potrebbe fare questo:

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

Nota che ImageMagick è il più potente, ExactImage è il più veloce, e GraphicsMagick è un popolo di ImageMagick, che è più veloce ma un po 'meno potente e ha alcuni bug. Solo ImageMagick può essere utilizzato da PHP, gli altri devono essere eseguiti con la funzione exec, sebbene ciò non sia necessariamente una cosa negativa dato che probabilmente gestiscono la propria memoria e la pulizia molto meglio di PHP.

+0

GraphicsMagick può essere utilizzato da php. [Http://www.php.net/manual/en/book.gmagick.php] – Isius

2

CMYK è un metodo di stampa delle immagini utilizzando la miscelazione della luce sottrattiva piuttosto che dell'additivo. Come probabilmente saprai, i colori RGB sono composti da rosso, verde e blu, mentre i pixel sul monitor del tuo computer o TV emettono quei colori. Nella stampa, viene utilizzata generalmente carta bianca. Riflette (vicino a) il 100% della luce rossa, verde e blu. Quando si mette l'inchiostro sulla carta, l'inchiostro assorbe uno o più di quei colori. Quindi l'inchiostro rosso sta effettivamente assorbendo la luce verde e blu che normalmente verrebbe riflessa dalla carta. Nella stampa usano i complementi di rosso, verde e blu. Quelli sono ciano, magenta e giallo. CMY = Ciano, Magenta, Giallo. La K sta per nero. (Non usavano B perché il blu in RGB è già B.) Si scopre che è difficile ottenere un bel nero profondo usando gli inchiostri ciano, magenta e giallo (più costoso - devi usare tutti e 3!), quindi lo aggiungono un po 'di nero puro (che riflette quasi la mancanza di luce) per farlo sembrare migliore.

Quindi, ciò che significa per te è che devi convertire da CMYK a RGB. Sfortunatamente, non c'è un solo modo per farlo. Se si guarda qualcosa come Photoshop, è necessario prima impostare i tipi di inchiostro e carta che si desidera emulare prima della conversione.

Se si dispone di un CMY puro senza componente nero, è possibile utilizzare r = 1,0 - c, g = 1,0 - m, b = 1,0 - y e ottenere un'approssimazione ragionevolmente buona dell'immagine. La prima risposta in this question è una risposta ragionevole.

Si può anche capire una particolare conversione che si desidera utilizzare in Photoshop o qualche altra applicazione e fare un tavolo da questo. L'ho già fatto creando un'immagine che è, per esempio, 1024x1024. Ogni quadrato 32x32 ha un gradiente con ciano nella direzione x che va da 0 a 1 e il magenta nella direzione y va da 0 a 1. Quindi da sinistra a destra, ogni quadrato ha quantità crescenti di giallo e va dall'alto verso il basso, hanno una quantità crescente di nero in loro. Carico l'immagine in Photoshop, la converto in RGB e la salviamo di nuovo in un formato senza perdita di dati (come TIFF) senza piastrelle, strisce o livelli (per facilità d'uso). Quindi lo carico nella mia app e lo uso come tabella di ricerca per fare la stessa conversione in RGB. È un po 'ingombrante la prima volta, ma una volta realizzato il tavolo di conversione, è piuttosto facile da usare. Io uso solo un'interpolazione bilineare per generare il valore RGB.