Я использую следующий сценарий для сохранения изображений в папке, но есть одно изображение, которое показывает это сообщение: «изображение невозможно отобразить, потому что оно содержит ошибки».
Я думаю, что проблема – это что-то вроде cmyk и rgb на изображении, но при поиске в Интернете для способа конвертировать cmyk в rgb с помощью php. Я не могу найти пример того, как это сделать.
Вот один из примеров: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/, но я не знаю как использовать это в моем случае.
Ссылка на изображение выглядит примерно так: www.example.com/attachment?id=2290
Скрипт следующий:
<?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);?>
Позже на некоторых страницах я буду использовать что-то подобное, чтобы показать изображение. <img src = "http://www.example.com/img/ <?php echo $name?>
.jpg" alt = " <?php echo $alt?>
" height = "127px" width = "190px" />
Любая помощь в преобразовании этих изображений будет оценена Спасибо Даниил
Я сомневаюсь, что цветовое пространство (CMYK или RGB) является вашей проблемой. Хотя каждый должен использовать RGB-изображения в сети, браузеры будут по-прежнему отображать изображение CMYK без жалоб.
Чтобы преобразовать изображение из CMYK в RGB, вам необходимо установить программу манипуляций с изображениями, например ImageMagick, GraphicsMagick или ExactImage. Любой из них может делать то, что вы хотите, но должен быть установлен администратором сервера. Если вам повезет, ImageMagick может быть уже установлен, и в этом случае вы можете сделать это:
$image= '/path/to/your/file.jpg'; $i = new Imagick($image); $i->setImageColorspace(Imagick::COLORSPACE_SRGB); $i->writeImage($image); $i->destroy();
Обратите внимание, что ImageMagick является самым мощным, ExactImage является самым быстрым, а GraphicsMagick – это народ ImageMagick, который быстрее, но немного менее мощный и имеет некоторые ошибки. Только ImageMagick можно использовать с PHP, другие должны быть выполнены с помощью функции exec
, хотя это не обязательно плохо, поскольку они, вероятно, справляются с собственной памятью и очисткой намного лучше, чем PHP.
CMYK – это метод печати изображений с использованием субтрактивного свечения, а не аддитивного. Как вы, наверное, знаете, цвета RGB состоят из красного, зеленого и синего цветов, а пиксели на мониторе компьютера или телевизоре излучают эти цвета. При печати обычно используется белая бумага. Он отражает (близко) 100% красного, зеленого и синего света. Когда вы наносите чернила на бумагу, чернила поглощают один или несколько из этих цветов. Таким образом, красные чернила фактически поглощают зеленый и синий свет, которые обычно отражаются на бумаге. При печати они используют дополнения красного, зеленого и синего. Это голубые, пурпурные и желтые. CMY = голубой, пурпурный, желтый. K обозначает черный цвет. (Они не использовали B, потому что синий в RGB уже есть B.) Оказывается, трудно получить хороший глубокий черный цвет с использованием голубых, пурпурных и желтых чернил (плюс дорого – вам нужно использовать все 3!), поэтому они добавляют немного чистого черного (который близок к отсутствию света), чтобы он выглядел лучше.
Так что для вас это значит, что вам нужно конвертировать из CMYK в RGB. К сожалению, нет ни единого способа сделать это. Если вы посмотрите на что-то вроде Photoshop, вам нужно сначала установить типы чернил и бумаги, которые вы хотите подражать, прежде чем конвертировать.
Если у вас был чистый CMY без черного компонента, вы могли бы использовать r = 1.0 – c, g = 1.0 – m, b = 1.0 – y и получить достаточно хорошее приближение изображения. Первый ответ в этом вопросе – разумный ответ.
Вы также можете найти конкретное преобразование, которое вы хотите использовать в Photoshop или другом приложении, и составить таблицу. Я сделал это раньше, создав изображение, которое, скажем, 1024×1024. Каждый квадрат 32×32 имеет градиент с голубым цветом в направлении x, идущем от 0 до 1, и пурпурный в направлении y, идущий от 0 до 1. Затем слева направо каждый квадрат имеет все большее количество желтого и переходит сверху вниз, они увеличивают количество черного в них. Я загружаю изображение в Photoshop, конвертирую его в RGB и снова сохраняю в формате без потерь (например, TIFF) без плиток, полос или слоев (для удобства использования). Затем я загружаю его в свое приложение и использую его в качестве справочной таблицы для того же преобразования в RGB. Это немного громоздко в первый раз, но после того, как вы сделали таблицу преобразования, она довольно проста в использовании. Я просто использую билинейную интерполяцию для генерации значения RGB.