[aide] Photoshop, sélection de pixels transparents, images PNG et JavaScript

J’ai déjà posté sur un forum dédié à photoshop mais n’ai pas encore reçu de réponse et je me suis soudain dit que sur la zone quelqu’un devait bien avoir sa petite idée sur le sujet. C’est donc sans vergogne que je m’auto-plagie :

Bonjour à tous, dans le cadre du développement d’un jeu vidéo je me retrouve à devoir utiliser photoshop en plus de mon traditionnel illustrator.

Pour faire simple le moteur graphique de notre jeu nous permet de diviser des petits bonshommes en différentes parties : corps, yeux, bouches. Je travaille à la base en 256x256 sous illustrator et j’ai écrit un script JS qui me permet d’exporter tous mes calques selon dans les différentes tailles qui me conviennent vers des images PNG avec le nom de calque comme nom de fichier. Cette partie fonctionne à merveille (je poste le script si ça intéresse quelqu’un) c’est mon autre script d’import dans photoshop qui me fait des misères. Notre moteur de jeu nous permet de faire des animation un peu comme dans un GIF donc il va directement piocher dans le fichier PSD en utilisant les calques au lieu d’images exportées.
Seulement pour incorporer ces images PNG dans photoshop c’est assez difficile. Premièrement comme j’exporte chaque partie de mon personnage j’ai de très grandes zones transparentes sur certaines images et photoshop n’aime pas les zones transparentes. Voilà comment je procède a priori :

  • Création d’un PSD à la bonne taille en RGB
  • Chargement du PNG à inclure dans le PSD
  • Selection totale du PNG (une box qui fait tout le caneva) + copie
  • Collage dans le PSD : les parties transparentes ne sont pas conservées, les pixels colorés sont centrés sur un nouveau calque et donc décalés par rapport à l’original.

A posteriori on se rend compte que ça ne fonctionne pas d’un poil. Donc première question : Comment faire pour copier tout le canevas et prendre en compte les pixels transparents ?
Si j’ai la réponse à cette question je pourrais le scripter et automatiser le tout.

Toutefois j’ai trouvé une astuce mais qui n’est pas scriptable en l’état :

  • Dans le PNG : clic droit sur le calque > dupliquer et je le duplique dans le PSD, tout est calé et tout va bien.

Seulement dans le JS ça ne fonctionne pas, j’ai ce type de code :

var curPNG = open(File(fileList[j].fsName)) app.activeDocument = doc; var calque = doc.artLayers.add(); calque.name = fileList[j].displayName.substring(0, fileList[j].displayName.length -4); app.activeDocument = curPNG; curPNG.layers[0].duplicate(calque, ElementPlacement.INSIDE);
La ligne

curPNG.layers[0].duplicate(calque, ElementPlacement.INSIDE);

Me fait une erreur « illegal argument ». (j’ai aussi essayé sans ElementPlacement.INSIDE)
Ma seconde question est donc la suivante : Comment faire pour dupliquer un calque sur un autre document en JavaScript ?

Merci d’avance pour l’aide que vous pourrez m’apporter, sinon merci de m’avoir lu :slight_smile:

[quote=“AnarX, post:1, topic: 49750”][…] Donc première question : Comment faire pour copier tout le canevas et prendre en compte les pixels transparents ?
[…][/quote]

Je vais peut-être être complètement hors sujet, mais tu pourrais peut-être passer de illustrator à photoshop sans faire de PNG. L’export en PSD d’illustrator inclut les calques, nommés correctement, avec leurs transparences, et correctement placés les uns par rapport aux autres. Le seul problème est que le canevas du PSD créé ainsi fait la taille des objets qu’il contient plutôt que du canevas du fichier illustrator. Donc il faudra surement importer ce PSD dans un PSD générique à la bonne taille.

J’espère avoir été utile, bon courage en tout cas!