[ImageMagick] zelfde aanroep vanuit 2 envs geeft verschillen

Pagina: 1
Acties:

  • js303
  • Registratie: April 2003
  • Laatst online: 22-11 12:35
hallo, als ik vanuit 2 verschillende omgevingen/users een identify of convert commando aanroep, met dezelfde opties en hetzelfde beeld, dan krijg ik verschillende resultaten. specifieker:

Omgeving 1: vanuit SSH (putty) als user root roep ik aan:
code:
1
2
3
4
5
/usr/local/bin/convert -verbose 
-limit file 10 -limit area 100 -limit memory 250 -limit map 500 -limit disk 1 
-geometry 709x234 -density 300 -quality 100 
"/usr/www/uli.eps" -flatten -colorspace RGB -strip 
"/usr/www/uli3.jpg"


resultaat is als verwacht: een geconverteerd plaatje in kleur.
NB: als ik een identify op het plaatje doe dan geeft deze DirectClassRGB aan :)

Omgeving 2: vanuit PHP voer ik een exec() uit als user nobody:
code:
1
2
3
4
5
/usr/local/bin/convert -verbose 
-limit file 10 -limit area 100 -limit memory 250 -limit map 500 -limit disk 1 
-geometry 709x234 -density 300 -quality 100 
"temp/2db3828d8d6b6184926c1d553128d4fc/uli.eps" -flatten -colorspace RGB -strip 
"temp/2db3828d8d6b6184926c1d553128d4fc/uli3.jpg"


resultaat niet goed: een heel vies lores grijs-plaatje.
NB: als ik een identify op het plaatje doe dan geeft deze DirectClassGray aan :(

Vraag: waarom gaat het goed vanuit SSH en fout vanuit PHP exec()-aanroep? ik vermoed iets met de environment variabelen maar wat?

NB: in php heb ik een drietal environment variabelen gezet voor de tempfiles van imagemagick. het maakt overigens geen verschil of ik dit aan of uitzet op het resultaat van het plaatje.

code:
1
2
3
putenv("MAGICK_TMPDIR={$cfg['imtemp']}");
putenv("TMP={$cfg['imtemp']}");
putenv("TMPDIR={$cfg['imtemp']}");


info:
PHP versie 4.4.2 hoewel dit er volgens mij niet veel toe doet
ImageMagick 6.2.5
FreeBSD 5.4
testplaatje is een RGB .eps bestand gemaakt in Photoshop 6.0

  • js303
  • Registratie: April 2003
  • Laatst online: 22-11 12:35
ik heb ook maar even een identify aangeroepen met de -verbose optie, zowel vanuit php-exec() als vanuit putty. daar zie je al direct een verschil: putty ziet het beeld als een truecolor beeld terwijl de exec() aanroep het als een grayscale beeld ziet.

putty:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
front# /usr/local/bin/identify -verbose "/usr/www/uli.eps"
Image: /usr/www/uli.eps
  Format: EPT (Encapsulated PostScript with TIFF preview)
  Geometry: 170x56
  Class: DirectClass
  Base geometry: 709x234
  Type: TrueColor
  Endianess: Undefined
  Colorspace: RGB
  Channel depth:
    Red: 8-bits
    Green: 8-bits
    Blue: 8-bits
  Channel statistics:
    Red:
      Min: 0 (0)
      Max: 255 (1)
      Mean: 143.979 (0.564622)
      Standard deviation: 122.205 (0.479237)
    Green:
      Min: 49 (0.192157)
      Max: 255 (1)
      Mean: 172.686 (0.677198)
      Standard deviation: 90.541 (0.355063)
    Blue:
      Min: 94 (0.368627)
      Max: 255 (1)
      Mean: 198.808 (0.779639)
      Standard deviation: 60.6423 (0.237813)
  Colors: 1321
  Rendering-intent: Undefined
  Resolution: 72x72
  Units: Undefined
  Filesize: 3e+01kb
  Interlace: None
  Background Color: white
  Border Color: #DFDFDF
  Matte Color: grey74
  Page geometry: 170x56+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Undefined
  Orientation: Undefined
  Comment:  Image generated by GNU Ghostscript (device=pnmraw)
  Signature: 67916918d85d73d4a7504619cc69b5bfc87482cc014078eba7209dd3479cfcb8
  Profile-iptc: 3794 bytes


php-exec():
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/usr/local/bin/identify -verbose "/usr/www/uli.eps"
Version: ImageMagick 6.2.5 06/01/06 Q8 http://www.imagemagick.org
Array
(
    [0] => Image: /usr/www/uli.eps
    [1] =>   Format: EPT (Encapsulated PostScript with TIFF preview)
    [2] =>   Geometry: 170x56
    [3] =>   Class: DirectClass
    [4] =>   Type: Bilevel
    [5] =>   Endianess: MSB
    [6] =>   Colorspace: Gray
    [7] =>   Channel depth:
    [8] =>     Gray: 1-bits
    [9] =>   Channel statistics:
    [10] =>     Gray:
    [11] =>       Min: 0 (0)
    [12] =>       Max: 1 (1)
    [13] =>       Mean: 0.663971 (0.663971)
    [14] =>       Standard deviation: 0.472349 (0.472349)
    [15] =>   Colors: 2
    [16] =>   Histogram:
    [17] =>       3199: (  0,  0,  0)   black
    [18] =>       6321: (255,255,255)   white
    [19] =>   Rendering-intent: Undefined
    [20] =>   Resolution: 71.9284x71.9284
    [21] =>   Units: PixelsPerInch
    [22] =>   Filesize: 5kb
    [23] =>   Interlace: None
    [24] =>   Background Color: white
    [25] =>   Border Color: #DFDFDF
    [26] =>   Matte Color: grey74
    [27] =>   Page geometry: 170x56+0+0
    [28] =>   Dispose: Undefined
    [29] =>   Iterations: 0
    [30] =>   Compression: None
    [31] =>   Orientation: TopLeft
    [32] =>   Signature: 55423e8fd7195a7a109d085ecbe6184c6af13cca4109205f04e80b800f991cb8
    [33] =>   Profile-iptc: 3794 bytes


volgens mij pakt de php-exec() de TIFF thumbnail die aan de EPS vastzit, terwijl vanuit putty de daadwerkelijk imagedata gebruikt wordt. waar of door wat wordt dan bepaald hoe het beeld geinterpreteerd moet worden? zou het kunnen dat identify/convert of gs diens configuratie niet kan vinden bij de aanroep vanuit php-exec() met user nobody?

[ Voor 3% gewijzigd door js303 op 08-11-2006 11:07 ]


  • js303
  • Registratie: April 2003
  • Laatst online: 22-11 12:35
OK opgelost. probleem zit 'em inderdaad in de environments.
identify en gs staan op deze machine in /usr/local/bin
user root waarmee ik inlog op SSH, heeft onder andere PATH=/usr/local/bin

apache draait onder user nobody, die heeft helemaal geen paden gedefinieerd. dit vormde in eerste instantie geen probleem omdat ik convert aanroep met het pad ervoor: /usr/local/bin/convert
maar aangezien convert zelf weer gs moet aanroepen om de eps te converteren maar dit dus doet zonder absoluut pad ervoor, zal hier waarschijnlijk een probleem optreden.

mbv het php-commando putenv heb ik het probleem opgelost:

code:
1
putenv("PATH=/usr/local/bin:/usr/X11R6/bin")

[ Voor 3% gewijzigd door js303 op 08-11-2006 11:52 ]