2011-12-30 16 views
5

Tôi đang sử dụng tập lệnh sau để lưu hình ảnh trên một thư mục nhưng có một hình ảnh hiển thị thông báo này "hình ảnh không thể hiển thị vì nó chứa lỗi".cmyk để rgb bằng cách sử dụng php

Tôi nghĩ rằng vấn đề là một cái gì đó gọi là cmyk và rgb trên hình ảnh, nhưng khi tìm kiếm trên web cho một cách để chuyển đổi cmyk để rgb bằng cách sử dụng php tôi không thể tìm thấy một ví dụ về làm thế nào để làm điều này.

Dưới đây là một ví dụ: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/ nhưng tôi không hiểu cách sử dụng trong trường hợp của tôi.

Liên kết cho hình ảnh là một cái gì đó như: www.example.com/attachment?id=2290

Kịch bản là như sau:

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

Sau đó trong một số trang tôi sẽ sử dụng một cái gì đó như điều này để hiển thị hình ảnh. < img src = " http://www.example.com/img/ <?php echo $name?> .jpg " alt = " <?php echo $alt?> " height = " 127px " width = " 190px "/>

Bất kỳ giúp đỡ về chuyển đổi những hình ảnh này sẽ được đánh giá cao Cảm ơn Daniel

+0

Tôi nghĩ rằng tệp hình ảnh của bạn có thể bị hỏng. – sczizzo

+0

Tại sao?, Điều gì khiến bạn nghĩ vậy? – user983248

+0

Nói chung, "tập tin XYZ không thể được hiển thị bởi vì nó có chứa lỗi" có nghĩa là tập tin XYZ bị hỏng hoặc có phần mở rộng tập tin sai. Dù bằng cách nào, nó có lẽ không phải là một vấn đề CMYK-RGB. – sczizzo

Trả lời

4

Tôi nghi ngờ rằng không gian màu (CMYK hoặc RGB) là vấn đề của bạn. Mặc dù mọi người nên sử dụng hình ảnh RGB trên Net, các trình duyệt vẫn sẽ hiển thị hình ảnh CMYK mà không có khiếu nại.

Để chuyển đổi hình ảnh từ CMYK sang RGB, bạn cần cài đặt chương trình thao tác hình tượng, chẳng hạn như ImageMagick, GraphicsMagick hoặc ExactImage. Bất kỳ trong số này có thể làm những gì bạn muốn, nhưng phải được cài đặt bởi người quản trị máy chủ. Nếu bạn luckly, ImageMagick có thể đã được cài đặt, trong trường hợp này bạn có thể làm điều này:

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

Lưu ý rằng ImageMagick là mạnh nhất, ExactImage là nhanh nhất, và GraphicsMagick là một dân gian của ImageMagick, đó là nhanh hơn nhưng ít mạnh hơn và có một số lỗi. Chỉ ImageMagick có thể được sử dụng từ PHP, những thứ khác phải được thực thi với hàm exec, mặc dù điều đó không nhất thiết là một điều xấu vì chúng có thể xử lý bộ nhớ của riêng chúng và dọn dẹp tốt hơn nhiều so với PHP.

+0

GraphicsMagick có thể được sử dụng từ php. [http://www.php.net/manual/en/book.gmagick.php] – Isius

2

CMYK là phương pháp in ảnh bằng cách sử dụng ánh sáng pha trộn trừ thay vì phụ gia. Như bạn có thể đã biết, các màu RGB bao gồm màu đỏ, xanh lá cây và xanh dương và các pixel trong màn hình máy tính hoặc TV của bạn phát ra các màu đó. Trong in, thường sử dụng giấy trắng. Nó phản ánh (gần) 100% ánh sáng đỏ, lục và lam. Khi bạn đặt mực trên giấy, mực sẽ hấp thụ một hoặc nhiều màu đó. Vì vậy, mực đỏ thực sự hấp thụ ánh sáng màu xanh lá cây và màu xanh thường được phản ánh trên giấy. Trong quá trình in, họ sử dụng các bổ sung màu đỏ, xanh lục và xanh dương. Đó là màu lục lam, đỏ tươi và vàng. CMY = Lục lam, Đỏ tươi, Vàng. Chữ K tượng trưng cho màu đen. (Họ không sử dụng B vì màu xanh trong RGB đã là B.) Hóa ra thật khó để có được một màu đen sâu đẹp bằng cách sử dụng mực màu lục lam, đỏ tươi và vàng (cộng với đắt tiền - bạn phải sử dụng tất cả 3!), do đó, họ thêm nó một chút tinh khiết màu đen (mà phản ánh gần không có ánh sáng) để làm cho nó trông tốt hơn.

Điều này có nghĩa là bạn phải chuyển đổi từ CMYK sang RGB. Thật không may, không có một cách duy nhất để làm điều đó. Nếu bạn nhìn vào một cái gì đó như Photoshop, nó đòi hỏi bạn phải đầu tiên thiết lập các loại mực và giấy bạn muốn thi đua trước khi chuyển đổi.

Nếu bạn có CMY thuần túy không có thành phần màu đen, bạn có thể sử dụng r = 1.0 - c, g = 1.0 - m, b = 1.0 - y và nhận được xấp xỉ gần đúng của hình ảnh. Câu trả lời đầu tiên trong this question là phản hồi hợp lý.

Bạn cũng có thể tìm ra một chuyển đổi cụ thể mà bạn muốn sử dụng trong Photoshop hoặc một số ứng dụng khác và tạo bảng từ đó. Tôi đã làm điều này trước đây bằng cách tạo ra một hình ảnh đó là, nói, 1024x1024. Mỗi hình vuông 32x32 có một gradient với lục lam theo hướng x đi từ 0 đến 1 và đỏ tươi theo hướng y đi từ 0 đến 1. Sau đó từ trái sang phải, mỗi ô vuông có lượng vàng tăng dần và từ trên xuống dưới, chúng có số lượng màu đen ngày càng tăng trong đó. Tôi tải hình ảnh vào Photoshop, chuyển đổi nó sang RGB và lưu lại thành định dạng không mất dữ liệu (như TIFF) không có các lát, dải hoặc lớp (để dễ sử dụng). Sau đó, tôi tải nó vào ứng dụng của tôi và sử dụng nó như một bảng tra cứu để thực hiện chuyển đổi tương tự sang RGB. Đó là một chút cồng kềnh lần đầu tiên, nhưng một khi bạn có bảng chuyển đổi được thực hiện, nó khá dễ sử dụng. Tôi chỉ sử dụng một phép nội suy song tuyến để tạo ra giá trị RGB.