2011-12-30 25 views
5

Używam następującego skryptu do zapisywania obrazów w folderze, ale jest jeden obraz, który pokazuje ten komunikat "obraz nie może być wyświetlony, ponieważ zawiera błędy".cmyk do rgb przy użyciu php

Myślę, że problemem jest coś, co nazywa się cmyk i rgb na obrazie, ale podczas wyszukiwania w Internecie, aby przekonwertować cmyk na rgb przy użyciu php, nie mogę znaleźć przykładu, jak to zrobić.

Oto jeden z przykładów: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/, ale nie wiem, jak tego użyć w moim przypadku.

Link do obrazka jest coś takiego jak: www.example.com/attachment?id=2290

Skrypt jest następująca:

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

Później w niektórych stronach będę używać coś takiego to, aby pokazać obraz. < IMG src = " http://www.example.com/img/ <?php echo $name?> jpg " alt = " <?php echo $alt?> " wysokość = " 127px " szerokość = " 190px "/>

pomocy z konwersji tych obrazów zostanie być docenionym Dzięki Daniel

+0

Myślę, że plik obrazu może być po prostu uszkodzony. – sczizzo

+0

Dlaczego?, Co sprawia, że ​​tak myślisz? – user983248

+0

Ogólnie "plik XYZ nie może być wyświetlany, ponieważ zawiera błędy" oznacza plik XYZ jest uszkodzony lub ma złe rozszerzenie pliku. Tak czy inaczej, prawdopodobnie nie jest to problem CMYK-RGB. – sczizzo

Odpowiedz

4

Wątpię, czy problem dotyczy przestrzeni kolorów (CMYK lub RGB). Chociaż wszyscy powinni używać obrazów RGB w sieci, przeglądarki nadal będą wyświetlać obraz CMYK bez reklamacji.

Aby przekonwertować obraz z CMYK na RGB, musisz mieć zainstalowany program do manipulacji, taki jak ImageMagick, GraphicsMagick lub ExactImage. Każdy z nich może zrobić to, co chcesz, ale musi być zainstalowany przez administratora serwera. Jeśli jesteś luckly, ImageMagick może już być zainstalowana w takim przypadku można to zrobić:

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

Zauważ, że ImageMagick jest najpotężniejszym, ExactImage jest najszybszy i GraphicsMagick jest ludowa ImageMagick, który jest szybszy, ale trochę mniej potężny i ma kilka błędów. Tylko ImageMagick może być używany z PHP, inne muszą być wykonywane przy pomocy funkcji exec, choć niekoniecznie jest to złe, ponieważ prawdopodobnie radzą sobie z własnymi wspomnieniami i czyszczeniem o wiele lepiej niż PHP.

+0

GraphicsMagick może być używany przez php. [http://www.php.net/manual/en/book.gmagick.php] – Isius

2

CMYK to metoda drukowania obrazów przy użyciu subtraktywnego mieszania światła zamiast dodatku. Jak zapewne wiesz, kolory RGB składają się z czerwonego, zielonego i niebieskiego, a piksele na monitorze komputera lub telewizorze emitują te kolory. W druku stosuje się zazwyczaj biały papier. Odzwierciedla (blisko) 100% światła czerwonego, zielonego i niebieskiego. Po umieszczeniu tuszu na papierze atrament pochłania jeden lub więcej z tych kolorów. Tak więc czerwony atrament pochłania w rzeczywistości zielone i niebieskie światło, które normalnie odbijałoby się od papieru. W druku używają dopełnień czerwonego, zielonego i niebieskiego. Są to cyjan, magenta i żółty. CMY = cyjan, magenta, żółty. K oznacza czerń. (Nie używali B, ponieważ niebieski w RGB już jest B.) Okazuje się, że trudno jest uzyskać ładną głęboką czerń przy użyciu atramentów w kolorach cyjan, magenta i żółtym (plus kosztowne - trzeba użyć wszystkich 3!), więc dodają jej odrobinę czystej czerni (która odbija bliski brak światła), aby wyglądała lepiej.

To oznacza dla ciebie, że musisz przekonwertować CMYK na RGB. Niestety nie ma na to jednego sposobu. Jeśli spojrzysz na coś podobnego do Photoshopa, musisz najpierw ustawić typy atramentu i papieru, które chcesz emulować przed konwersją.

Jeśli masz czysty CMY bez czarnego komponentu, możesz użyć r = 1,0 - c, g = 1,0 - m, b = 1,0 - y i uzyskać dość dobre przybliżenie obrazu. Pierwsza odpowiedź w this question jest rozsądną odpowiedzią.

Można również znaleźć konkretną konwersję, której chcesz użyć w programie Photoshop lub innej aplikacji i utworzyć z niej tabelę. Zrobiłem to wcześniej, tworząc obraz, który jest, powiedzmy, 1024x1024. Każdy kwadrat o wymiarach 32x32 ma gradient z cyjanem w kierunku x przechodzącym od 0 do 1 i magenta w kierunku y przechodzącym od 0 do 1. Następnie od lewej do prawej, każdy kwadrat ma zwiększającą się ilość żółtego i przechodzącego od góry do dołu, mają w sobie coraz więcej czerni. Załadowałem obraz do Photoshopa, przekonwertowałem go na RGB i zapisałem ponownie w bezstratnym formacie (jak TIFF) bez płytek, pasków lub warstw (dla łatwości użycia). Następnie ładuję go do mojej aplikacji i używam go jako tabeli przeglądowej, aby wykonać tę samą konwersję do RGB. Po raz pierwszy jest to trochę kłopotliwe, ale gdy już zrobisz tabelę konwersji, jest to całkiem łatwe w użyciu. Po prostu używam interpolacji dwuliniowej do generowania wartości RGB.

Powiązane problemy