2015-10-05 4 views
1

J'ai lu la documentation d'utilisation et n'ai trouvé aucun moyen de produire une image de X pixels de large, avec la hauteur déterminée par le rapport d'aspect. J'ai une grande quantité de fichiers EPS dont j'ai besoin pour pixelliser, et ils doivent avoir une largeur d'au moins 2400 pixels. Ma solution de contournement actuelle consiste à définir une résolution généralement assez élevée en utilisant le drapeau -r, mais cela rend beaucoup d'images beaucoup, beaucoup plus grand que ce que j'ai besoin d'être.Ghostscript: Définir la largeur de pixel tout en conservant les proportions, EPS à PNG

Je suis actuellement en utilisant cette commande:

gs -dNOPAUSE -sDEVICE=pngalpha -dEPSCrop -sOutputFile=./result.png -r500x500 -dEPSFITPAGE -dBATCH -dQUIET ./input.eps 

Je l'ai expérimenté avec différentes combinaisons et réglages de -g, -dDEVICEWIDTH, -dDEVICEHEIGHT, -dFIXEDMEDIA, -dFIXEDRESOLUTION et -dFitPage, mais je ne pouvais pas comprendre.

J'ai l'impression qu'il peut y avoir quelques maths aimables nécessaires pour simplement définir la valeur correcte pour -r qui donnera les dimensions souhaitées, mais je ne suis pas sûr de la façon de procéder. Toute aide appréciée!

Répondre

1

Vous ne pouvez pas spécifier (à partir de la ligne de commande) quoi que ce soit qui modifie une dimension et redimensionne l'autre cote.

Vous pouvez le faire en programmant en PostScript. Les demandes de taille de support sont traitées par setpagdevice, vous pouvez soit redéfinir setpagedevice afin que je puisse pré-traiter la demande de taille de support ou créer une procédure BeginPage qui modifie la taille du support. Redéfinir setpagedevice est probablement le plus simple.

Ecrivez une routine qui examine la largeur et la hauteur requises, ainsi que la valeur actuelle de HWResolution. Comparez cela avec une valeur cible connue (qui peut être stockée dans un dictionnaire PostScript en utilisant -d = si nécessaire.Calculez le facteur d'échelle requis et appliquez-le à la largeur et la hauteur demandées, modifiez les valeurs demandées de manière appropriée et transmettez-les à l'original définition setpagedevice.

cela empêche également toute obligation de mettre DEVICEWIDTHPOINTS, DEVICEHEIGHTPOINTS ou FIXEDMEDIA.

+0

j'essayé de regarder dans PostScript, mais je ne pouvais pas trouver des guides succincts ou des tutoriels qui contiennent les informations pertinentes, à l'exception de [ce monstrueux pdf guide de référence] (https://www.adobe.com/products/postscript/pdfs/PLRM.pdf) par Adobe. J'ai également trouvé [cette réponse] (http://stackoverflow.com/a/10024458/441212), mais je ne sais pas ce qui se passe vraiment dans le code. peut utiliser pour apprendre à faire les choses que vous venez de décrire? – Julien

+0

Voilà ma réponse et vous ne le voulez pas. PostScript est un langage de programmation, si vous voulez faire quelque chose de constructif avec, je crains que vous deviez apprendre au moins une partie de la langue. Le PLRM peut sembler grand mais c'est assez compact pour un langage complet, et c'est très bien écrit. Vous pouvez rechercher SO pour d'autres réponses impliquant BeginPage, je suis raisonnablement sûr que vous en trouverez de moi, peut-être d'autres. Je recommanderais le site Acumen Training de John Deubert (http://www.acumentraining.com/acumenjournal.html) pour des guides sur PostScript. Juillet 2001 a un article sur l'utilisation de BeginPage et EndpPage – KenS

+0

Merci Ken. Je vais regarder dans vos ressources suggérées. – Julien