J'ai un calque transparent dans Photoshop CS5 (donc en interne, il est très probablement stocké en tant que composant RVB non multiplié plus un composant alpha par pixel).
Maintenant, je veux transformer cela en un calque opaque (juste RVB non multiplié) + un masque alpha. le résultat devrait ressembler à l'original.
Je ne peux pas simplement sous-tendre le calque transparent avec du noir, prendre la sélection comme masque et fusionner les calques, car cela entraînerait la prémultiplication de l'alpha dans les valeurs RVB.
J'espère que vous comprenez le problème et pouvez me donner une solution.
Comme explication alternative: je veux le processus inversé de ceci:
- créer un nouveau calque et coller dans n'importe quelle image
- créer un masque avec un dégradé de blanc à noir
- appliquer le masque de calque
Images explicatives:
État A:
État B:
IMPORTANT: le calque est juste pour cet exemple entièrement rouge constant - mais vous pourriez penser à n'importe quelle image arbitraire au lieu du rouge constant. donc - pour passer de l'état A à l'état B, il suffit d'appliquer le masque de calque.
Je veux savoir comment passer de l'État B à l'État A.
Réponses:
Je comprends parfaitement ta douleur. Voici ma solution :)
Extraire Alpha en tant qu'action de masque
Voici ce qu'il fait:
Edit:
j'espère que cela aide :)
la source
Faux! Tout faux!
Je me suis trompé, et vous aussi dans le processus: ce que j'ai créé est en effet une image prémultipliée - pas prémultipliée avec du noir mais avec du blanc. Je laisse cette réponse aux autres pour en tirer parti.
J'ai réussi à le faire comme ça:
Et voici comment je l'ai fait:
Ceci est l'image de test que j'ai utilisée. La vue des chaînes dans PS ressemble à ceci:
En sélectionnant les canaux individuels, je les ai copiés dans des couches individuelles, puis les aplatis avec un fond blanc pour recevoir une carte en noir et blanc comme indiqué ici:
J'ai également extrait la transparence de l'image d'origine dans un calque en cliquant sur la vignette du calque et en remplissant un nouveau calque avec la sélection.
J'ai ensuite créé une nouvelle image avec les mêmes dimensions et sans transparence. J'ai ensuite collé les calques RVB que j'avais créés dans les canaux correspondants dans la nouvelle image:
Dans la dernière étape, j'ai `` aplati '' le calque en double-cliquant et créé un masque de calque en utilisant le calque alpha de l'image d'origine, ce qui se traduit par:
Comme indiqué ci-dessus, cela ne crée pas une image non prémultipliée, car mon exemple devrait ressembler à ceci pour être non prémultiplié:
Quelqu'un est-il plus intelligent que moi et peut-il créer cela? Je pense que sans script avancé basé sur les pixels, cela n'est pas possible dans Photoshop.
la source
Ok - J'ai créé un simple filtre pixelBender qui peut être utilisé avec le plugin Photoshop Photoshop (http://labs.adobe.com/downloads/pixelbenderplugin.html) pour supprimer la transparence d'un calque. le voici: http://neo.cycovery.com/removeTransparency.pbk
la source
Sur la base des réponses données et de vos commentaires, la réponse courte est: vous ne pouvez pas faire ce que vous voulez. Une fois le masque appliqué, le calque est rendu et les données d'image invisibles sont supprimées.
ÉDITER:
J'ai fait quelques exemples de fichiers png, puis utilisé php pour les manipuler (code source ci-dessous).
Si je crée un png avec une transparence aléatoire et que j'enregistre alors que le calque a un masque, les zones 100% claires (comme dans un outil de boîte) s'affichent en blanc si le support alpha est activé ou non. Les dégradés qui contiennent une certaine quantité de clair à 100% n'apparaissent pas avec l'alpha désactivé.
Si j'applique le masque de calque (de façon permanente) puis que je crée le png, alors php sert l'image d'origine si alpha est désactivé.
Une solution de contournement potentielle consiste donc à trouver un progiciel qui ne prend pas en charge l'alpha PNG et à le réenregistrer à partir de là. Quant à récupérer le masque d'origine, je ne l'ai pas encore examiné.
Les deux exemples de code sont la preuve de concept et SLOW.
Pour extraire l'alpha (note: php a une limitation GD de 128 alpha de niveau, plutôt que 256), donc une certaine précision est perdue. L'alpha peut être étendu à 256 à l'aide de l'outil Niveaux)
la source
J'ai découvert comment le faire dans GIMP ce n'est peut-être pas PhotoShop mais au moins il fera ce que vous demandez. (Comme je l'interprète de toute façon;))
À ce stade, vous vous retrouvez avec une image avec un masque de canal alpha.
Vous pouvez aller encore plus loin:
Il y a aussi un clip YouTube sur la façon de le faire.
la source
Cela semble incroyablement complexe. Si je comprends bien la question d'origine et ses diverses clarifications, le problème est de prendre une image arbitraire contenant de la transparence et de la rendre entièrement opaque, puis d'appliquer les valeurs alpha originales comme masque pour recréer l'apparence d'origine.
Si telle est la question, c'est une réponse très simple, quoique un peu fastidieuse.
Copiez le calque 10 fois. La transparence "se remplira" dans l'image composite.
Fusionnez toutes les copies (mais PAS le calque d'origine , dont vous aurez besoin pour les dernières étapes).
Répétez les étapes 1 et 2 avec le calque fusionné, puis recommencez. À ce stade, tous les pixels qui étaient à moins de 100% transparents sont maintenant 100% opaques (s'il y a des strates, répétez simplement le processus jusqu'à ce qu'il n'y en ait pas). C'est autant d'informations sur l'image qu'il est possible de récupérer.
Ctl / Cmd-Cliquez sur la vignette du calque d' origine pour charger sa transparence.
Une fois le nouveau calque opaque sélectionné, cliquez sur l'icône de masque de calque dans le panneau Calques.
la source
Ok, c'est en fait assez simple (vous devez ignorer les fourmis en marche)
Créez un nouveau calque et remplissez-le entièrement avec la couleur que vous utilisez (si l'échantillonnage le prend au point mort de la première image)
Ensuite, prenez votre première image et CTRL + Cliquez sur la vignette du calque, vous devriez voir une version de ceci:
Comme je l'ai déjà dit: ignorez les fourmis en marche, la mise en drapeau prend effet automatiquement dans CS5.
Assurez-vous ensuite que le calque rempli est sélectionné et cliquez sur le bouton de masque:
Ensuite, cachez simplement le calque inférieur et vous devriez avoir terminé, avec l'effet exact que vous recherchez :)
Et c'est ainsi que le reverse engineering d'un masque appliqué dans CS5. La fonction de sélection de couche CS5 est assez avancée, donc la plupart du temps, ignorez simplement les fourmis en marche car elles ne montrent pas correctement les plumes qui continueront avec la sélection :)
J'espère que cela marchera pour toi.
la source
Ce que vous voulez faire est facilement fait par un plugin, comme le plugin "Supprimer la transparence" de Photofreebies. Commencez par cliquer sur le calque pour sélectionner les pixels transparents, puis enregistrez ces informations de transparence dans un nouveau canal pour les conserver. Ensuite, vous appliquez le filtre "Supprimer la transparence" et vous voyez les pixels "cachés" de votre calque devenir opaques (assez intéressant de voir comment Photoshop met en page vos pixels 100% transparents BTW). Je souhaite vraiment depuis des années que cela soit intégré à Photoshop en mode natif, mais hélas, trop avancé, je suppose.
Malheureusement, je ne trouve pas de version compatible Photoshop CS6 d'un tel plugin pour Mac, donc je suis bloqué en ce moment. GraphicConverter peut le faire aussi (Supprimer le canal Alpha).
la source
Voici la réponse:
Faites un calque avec le truc que vous voulez dans l'image.
Faites une sélection pour le canal alpha souhaité.
Faites de la sélection un "masque de calque" pour le calque d'image.
Cliquez avec le bouton droit sur le masque de fusion et "Appliquer le masque de fusion".
Maintenant, la magie commence:
Je vous en prie!
la source