2011-12-30 3 views
5

J'utilise le script suivant pour enregistrer des images sur un dossier, mais il y a une image qui affiche ce message "l'image ne peut pas être affichée car elle contient des erreurs".cmyk à rgb en utilisant php

Je pense que le problème est quelque chose appelé cmyk et rgb sur l'image, mais lors de la recherche sur le web pour convertir cmyk en rgb en utilisant PHP, je ne trouve pas un exemple de comment faire.

Voici un des exemples: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/ mais je ne suis pas en train de le faire dans mon cas.

Le lien pour l'image est quelque chose comme: www.example.com/attachment?id=2290

Le script est le suivant:

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

Plus tard dans quelques pages que je vais utiliser quelque chose comme ceci pour montrer l'image. < img src = " http://www.example.com/img/ <?php echo $name?> .jpg " alt = " <?php echo $alt?> " height = " 127px " width = " 190px "/>

Toute aide à la conversion ces images être apprécié Merci Daniel

+0

Je pense que votre fichier image peut être corrompu. – sczizzo

+0

Pourquoi?, Qu'est-ce qui vous fait penser cela? – user983248

+0

Généralement, "le fichier XYZ ne peut pas être affiché car il contient des erreurs" signifie que le fichier XYZ est corrompu ou a la mauvaise extension de fichier. De toute façon, ce n'est probablement pas un problème CMJN-RVB. – sczizzo

Répondre

4

Je doute que l'espace colorimétrique (CMJN ou RVB) soit votre problème. Bien que tout le monde devrait utiliser des images RVB sur le Net, les navigateurs afficheront toujours une image CMJN sans se plaindre.

Pour convertir l'image de CMJN en RVB, vous devez installer un programme de manipulation Imagine, tel que ImageMagick, GraphicsMagick ou ExactImage. N'importe lequel d'entre eux peut faire ce que vous voulez, mais doit être installé par l'administrateur du serveur. Si vous êtes luckly, ImageMagick peut-être déjà installé, dans ce cas, vous pouvez le faire:

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

Notez que ImageMagick est le plus puissant, ExactImage est le plus rapide, et GraphicsMagick est un peuple de ImageMagick, qui est plus rapide mais un peu moins puissant et a quelques bugs. Seul ImageMagick peut être utilisé depuis PHP, les autres doivent être exécutés avec la fonction exec, bien que ce ne soit pas nécessairement une mauvaise chose car ils gèrent probablement mieux leur propre mémoire et leur nettoyage que PHP.

+0

GraphicsMagick peut être utilisé à partir de php. [http://www.php.net/manual/fr/book.gmagick.php] – Isius

2

CMJN est un procédé d'impression d'images utilisant un mélange de lumière soustractive plutôt qu'additif. Comme vous le savez probablement, les couleurs RVB sont composées de rouge, vert et bleu, et les pixels de votre écran d'ordinateur ou de votre téléviseur émettent ces couleurs. En impression, généralement du papier blanc est utilisé. Il reflète (près de) 100% de la lumière rouge, verte et bleue. Lorsque vous mettez de l'encre sur le papier, l'encre absorbe une ou plusieurs de ces couleurs. L'encre rouge absorbe donc la lumière verte et bleue normalement réfléchie par le papier. En impression, ils utilisent les compléments de rouge, vert et bleu. Ce sont le cyan, le magenta et le jaune. CMY = Cyan, Magenta, Jaune. Le K signifie noir. (Ils n'utilisaient pas B car le bleu en RGB est déjà B.) Il s'avère qu'il est difficile d'obtenir un beau noir profond en utilisant des encres cyan, magenta et jaune (plus cher - il faut utiliser les 3!), donc ils l'ajoutent un peu de noir pur (qui reflète presque pas de lumière) pour le rendre meilleur.

Ce que cela signifie pour vous, c'est que vous devez convertir du CMJN au RVB. Malheureusement, il n'y a pas un seul moyen de le faire. Si vous regardez quelque chose comme Photoshop, vous devez d'abord définir les types d'encre et de papier que vous voulez émuler avant de les convertir. Si vous aviez un CMY pur sans composante noire, vous pouvez utiliser r = 1.0 - c, g = 1.0 - m, b = 1.0 - y et obtenir une approximation relativement bonne de l'image. La première réponse dans this question est une réponse raisonnable.

Vous pouvez également déterminer une conversion particulière que vous souhaitez utiliser dans Photoshop ou dans une autre application et créer une table à partir de cette conversion. J'ai déjà fait cela en créant une image qui est, disons, 1024x1024. Chaque carré de 32x32 a un gradient avec cyan dans la direction x allant de 0 à 1 et magenta dans la direction y allant de 0 à 1. Puis de gauche à droite, chaque carré a des quantités croissantes de jaune, et va de haut en bas, ils ont des quantités croissantes de noir en eux. Je charge l'image dans Photoshop, la convertis en RVB et la sauvegarde à nouveau dans un format sans perte (comme le TIFF) sans carreaux, bandes ou calques (pour la facilité d'utilisation). Ensuite, je le charge dans mon application et l'utilise comme une table de recherche pour faire la même conversion en RVB. C'est un peu lourd la première fois, mais une fois que vous avez fait la table de conversion, c'est assez facile à utiliser. J'utilise simplement une interpolation bilinéaire pour générer la valeur RGB.