Toon posts:

Imagemagick maakt een bestand aan, kan er niks mee doen?

Pagina: 1
Acties:

Onderwerpen


  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 13:26

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Hallo,

Ik had vandaag even zin om met ImageMagic te spelen via de commandline i.c.m PHP, en dat lukt aardig.
Echter stuit ik nu op iets wazigs...

code:
1
2
3
$command = "convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \ -tile gradient:   -annotate +28+68 'Anthony' \ font_gradient.jpg"; 
system($command,$a);
echo "Result: ".$a;

Dit zou een plaatje moeten aanmaken zoals dit:


Echter wat er gebeurt is echt onbeschrijflijk voor mij in theorie?
Ik krijg een Result: 1 voor mijn neus. Lijkt wel goed te klinken?
En er worden twee images aangemaakt met de namen:

font_gradient-0.jpg
font_gradient-1.jpg

Maar met die bestanden kan ik helemaal niks, bij het openen geven ze een 404 - Not found, op de FTP kan ik ze niet verwijderen omdat ze niet bestaan, de UID en GID kloppen gewoon evenals de chmod die op 644 staat. Verwijderen kan wel vanuit de Direct Admin filemanager, maar vanwaar deze vage bestanden? Ik zou eerder een werkende 'font_gradient.jpg' verwachten?

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


Anoniem: 96523

Ik krijg een Result: 1 voor mijn neus. Lijkt wel goed te klinken?
Dit klopt, $a geeft de status van de actie terug, dus 0 als het fout ging en 1 als het goed ging.

Hier is een voorbeeld dat wel zou moeten werken:
PHP:
1
2
3
4
5
6
7
8
$command = "convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \ -tile gradient:   -annotate +28+68 'Anthony' \ font_gradient.jpg";
ob_start();
passthru($command, $result);
$content_grabbed=ob_get_contents();
ob_end_clean();

header('Content-Type: image/jpeg');
print $content_grabbed;

Dit zou de nieuwe afbeelding in de browser moeten tonen.

PS ik werk normaal met GD2, dus ik kan geen garantie geven dat het ook werkt omdat ik niet weet hoe IM in elkaar steekt...

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 13:26

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Het probleem blijft.
Ook als ik de code refactor naar:
PHP:
1
2
3
4
5
6
7
8
<?php
$command = "convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \ -tile gradient:   -annotate +28+68 'Anthony' \ font_gradient.jpg";
passthru($command, $result);


header('Content-Type: image/jpeg');
print $result;
?>

Ik krijg uiteindelijk een 'dood' plaatje in FF4, die niet weergegeven kan worden, omdat hij een fout bevat. :/

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 03-06 10:18

DexterDee

I doubt, therefore I might be

Die backslashes zijn definitief een onderdeel van je probleem. Ik heb je exacte scriptje zonder backslashes geprobeerd en krijg deze output:



Ik heb dat Candice font niet op mijn server staan, vandaar het afwijkende lettertype.

Mét backslashes krijg ik deze foutmeldingen:
convert: unable to open image ` -tile':  @ error/blob.c/OpenBlob/2587.
convert: no decode delegate for this image format ` -tile' @ error/constitute.c/ReadImage/532.

Volgens mij is je ImageMagick installatie niet helemaal lekker.

Laat je ImageMagick configuratie ut phpinfo() eens zien. Die van mij ziet er zo uit:

[Voor 78% gewijzigd door DexterDee op 25-05-2011 12:46]

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 13:26

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
gedaan:
PHP:
1
2
3
<?php
$command = "convert -size 320x100 xc:lightblue -font Candice -pointsize 72  -tile gradient:   -annotate +28+68 'Anthony'  font_gradient.jpg";
// etc...

Probleem blijft...

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

Waarom gebruik je de commandline en niet PHP's eigen interface?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 03-06 10:18

DexterDee

I doubt, therefore I might be

Overigens, die twee tijdelijke bestanden die hij maakt zouden gewoon "valid" moeten zijn.

De output zoals op mijn server van de tijdelijke bestanden:

font_gradient-0.jpg:


font_gradient-1.jpg:


Het enige "opmerkelijke" is dat ImageMagick bij mij bij allebei deze bestanden een spatie voor de filename zet, waardoor de feitelijke naam op het filesystem " font_gradient-0.jpg" is. Wellicht dat daardoor wat verwarring ontstaat met het displayen van deze images.

Overigens, ...
Ik krijg een Result: 1 voor mijn neus. Lijkt wel goed te klinken?
Dit klopt, $a geeft de status van de actie terug, dus 0 als het fout ging en 1 als het goed ging.
Dit zijn beide foute statements. Het gaat hier om een exit code van een systeemcommando. Daar geldt dat alleen exitcode 0 als succesvol wordt gezien en alles != 0 is een foutcode.

Tenslotte sluit ik me ook aan bij NMe's opmerking, waarom niet gebruik maken van de imagick extensie in PHP? Dan voorkom je al deze commandline ellende.

[Voor 20% gewijzigd door DexterDee op 25-05-2011 13:12]

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 13:26

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
NMe schreef op woensdag 25 mei 2011 @ 12:54:
Waarom gebruik je de commandline en niet PHP's eigen interface?
Gewoon om ermee te experimenteren. Als ik het in een project gebruik zal ik zeker dit vanuit de PHP interface gaan aanroepen. maar daarvoor moet ik wel eerst nog eventjes PHP hercompileren.

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 17-04 12:13
code:
1
$command = "convert -size 320x100 xc:lightblue -font Candice -pointsize 72  -tile gradient:   -annotate +28+68 'Anthony'  font_gradient.jpg"

Als je code-debuged begin je altijd eerst met het reduceren van de code tot iets simpels. bijvoorbeeld:
code:
1
$command = "convert -size 320x100 -annotate +28+68 'Anthony'  font_gradient.jpg"

En voeg dna dingen als (het misschien wel ontbrekende) font etc.. weer toe

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 13:26

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Aanhet reduceren ben ik ook al begonnen:
PHP:
1
2
3
4
5
6
<?php
$command = "convert -background lightblue label_file.gif";

system($command,$a);
  echo "Result: ".$a;
?>

Ik krijg dan Result 1.
En bovendien lijkt me dit ook geen lastige opdracht?
convert -background lightblue label_file.gif

[Voor 4% gewijzigd door AW_Bos op 25-05-2011 13:37]

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 03-06 10:18

DexterDee

I doubt, therefore I might be

AW_Bos schreef op woensdag 25 mei 2011 @ 13:15:
Gewoon om ermee te experimenteren. Als ik het in een project gebruik zal ik zeker dit vanuit de PHP interface gaan aanroepen. maar daarvoor moet ik wel eerst nog eventjes PHP hercompileren.
PHP hercompileren hoeft niet, je instaleert de imagick extensie via de package manager (php-imagick oid) of als deze er niet in zit, met pecl en zet de .so handmatig in de php ini met extension=imagick.so

Hoewel versimpelen van code om te debuggen altijd goed is, heb ik met mijn posts al aangetoond dat deze exacte scripts gewoon moeten werken. De fout zit 'm dus ergens in je ImageMagick installatie. Daar zou ik als eerste naar gaan kijken.

Roep dat convert statement eens gewoon op de commandline aan. Dan krijg je als het goed is een aantal foutmeldingen (anders zou je niet exit status 1 terug krijgen). Mocht dat niet genoeg informatie geven, geef dan de extra parameter -debug events mee, zodat je nog meer debug informatie krijgt. Pas als het op de commandline helemaal werkt, dan zou ik pas met een php script aan de slag gaan.

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 13:26

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Thnx :).
Ik ga even Putty induiken. Ook zal ik die extention even installeren straks.

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


  • HuHu
  • Registratie: Maart 2005
  • Niet online
DexterDee schreef op woensdag 25 mei 2011 @ 13:00:
Overigens, die twee tijdelijke bestanden die hij maakt zouden gewoon "valid" moeten zijn.

De output zoals op mijn server van de tijdelijke bestanden:

font_gradient-0.jpg:
[afbeelding]

font_gradient-1.jpg:
[afbeelding]

Het enige "opmerkelijke" is dat ImageMagick bij mij bij allebei deze bestanden een spatie voor de filename zet, waardoor de feitelijke naam op het filesystem " font_gradient-0.jpg" is. Wellicht dat daardoor wat verwarring ontstaat met het displayen van deze images.
Dat komt omdat er ook een extra spatie voor de bestandsnaam in het commando staat.

Anoniem: 96523

DexterDee schreef op woensdag 25 mei 2011 @ 13:00:
Overigens, ...

[...]

[...]

Dit zijn beide foute statements. Het gaat hier om een exit code van een systeemcommando. Daar geldt dat alleen exitcode 0 als succesvol wordt gezien en alles != 0 is een foutcode.
Je hebt gelijk, had het even verkeerd begrepen (php.net geeft hier ook geen uitleg over) en doe het zelf (in eigen applicatie) wel goed... DUs hoe ik die 2 nou kon omdraaien 8)7

Maargoed... als ik het zo even doorlees zitten er wel meerdere foutjes in de originele code, want het blijft status = 1 teruggeven. Dus er gaat al wat fout bij het converteren van de afbeelding. Ik zou daarom eerst kijken of het überhaupt werkt in de console en dan pas kijken of het probleem in PHP zit.

Het gebruik van de standaard PHP objecten is overigens wel handig, maar wordt dan ook alles ondersteund? Ik weet dat GD2 er standaard ingebakken zit, maar IM is alsnog los nodig om uit te voeren.
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee