J'essaie de créer un filigrane avec différentes valeurs d'opacité (de 0 opaque à 1 totalement transparent).Rmagick paramètre opacité en filigrane avec transparence
je la méthode suivante pour RMagick en rubis:
# 0 = opaque (Magick::OpaqueOpacity) 1= transparent (Magick::TransparentOpacity)
def watermark(opacity = 0.99, size = 'm')
manipulate! do |img|
logo = Magick::Image.read("#{Rails.root}/app/assets/images/watermark#{size}.png").first
logo.alpha(Magick::ActivateAlphaChannel)
logo.opacity = (1 - opacity.to_f) * Magick::QuantumRange
img.alpha(Magick::ActivateAlphaChannel)
img = img.composite(logo, Magick::NorthWestGravity, 0, 0, Magick::OverCompositeOp)
end
end
Mon problème est que cela semble fonctionner, mais le mode composite ou composite alpha ou le réglage de l'opacité ou alpha est un échec, parce que je reçois une transparence noire dans l'image. Par exemple, si mon filigrane est une image totalement transparente avec un texte, que je mets une image de voiture, alors je reçois une image plus sombre ou nocturne avec le filigrane, donc l'arrière-plan du filigrane ne se fond pas correctement.
Des suggestions pour définir correctement l'opacité de l'image du filigrane? Peut-être une méthode pour dissoudre le filigrane?
EDIT: Ajout d'exemples d'images:
http://uppix.com/f-watermarkg53925b100016ab8e.png (filigrane) http://oi62.tinypic.com/2us8rxl.jpg (image de base) http://oi60.tinypic.com/2pt6mg3.jpg (composition)
Comme cela est la manipulation d'images, il peut aider à montrer un exemple avec les entrées (image séparée, filigrane) et le résultat. Alors la réponse peut montrer le résultat de le faire différemment. IIRC vous devez essentiellement construire un nouveau filigrane avec un canal alpha recalculé et composite qui * sans * un paramètre d'opacité, car l'opacité et le canal alpha préexistant se combinent de manière non désirée. –
Mise à jour avec les images d'entrée. Comment recalculez-vous le canal alpha dans le filigrane? – shakaran
Vous créez une nouvelle image de filigrane temporaire composée d'un canevas blanc uni ayant l'opacité souhaitée (composée à l'aide de MultiplyCompositeOp). Cette nouvelle image aura l'effet combiné de l'alpha existante et de la quantité d'opacité souhaitée. –