Dynamic Watermarking on the JVM – DZone – Uplaza

Displaying photographs in your web site makes for an fascinating drawback: on one aspect, you need to make them publicly obtainable; on the opposite, you need to shield them in opposition to undue use. The age-long technique to attain it’s watermarking:

A digital watermark is a form of marker covertly embedded in a noise-tolerant sign reminiscent of audio, video or picture knowledge. It’s usually used to establish possession of the copyright of such sign. “Watermarking” is the method of hiding digital info in a service sign; the hidden info ought to, however doesn’t have to, comprise a relation to the service sign. Digital watermarks could also be used to confirm the authenticity or integrity of the service sign or to indicate the id of its homeowners. It’s prominently used for tracing copyright infringements and for banknote authentication.

— Digital watermarking

The watermark might be seen to behave as a deterrent to folks stealing the picture; alternatively, you should use it to show its origin after it has been stolen.

Nonetheless, if there are too many photographs on a website, it may be a burden to watermark them beforehand. It may be a lot easier to watermark them dynamically. I looked for an present JVM library devoted to watermarking however surprisingly discovered nothing. We are able to obtain that in a Jakarata EE-based net app with the Java 2D API and a easy Filter.

The Java 2D API has been a part of the JDK since 1.0, and it reveals.

It interprets into the next code:

personal enjoyable watermark(imageFilename: String): BufferedImage? {
    val watermark = ImageIO.learn(ClassPathResource("/static/$imageFilename").inputStream) ?: return null //1
    val watermarker = ImageIO.learn(ClassPathResource("/static/apache-apisix.png").inputStream) //2
    watermark.createGraphics().apply {                         //3
        drawImage(watermarker, 20, 20, 300, 300, null)         //4
        dispose()                                              //5
    }
    return watermark
}
  1. Get the unique picture
  2. Get the watermarking picture
  3. Get the canvas of the unique picture
  4. Draw the watermark. I used to be too lazy to make it partially clear
  5. Launch system sources related to this object

Different stacks could have devoted libraries, reminiscent of photon-rs for Rust and WebAssembly. With this in place, we will transfer to the net half. As talked about above, we’d like a Filter.

class WatermarkFilter : Filter {

    override enjoyable doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
        val req = request as HttpServletRequest
        val imageFilename = req.servletPath.break up("https://dzone.com/").final()  //1
        val watermarked = watermark(imageFilename)             //2
        response.outputStream.use {
            ImageIO.write(watermarked, "jpeg", it)             //3
        }
    }
}
  1. Get the picture filename
  2. Watermark the picture
  3. Write the picture within the response output stream

I defined the best way to watermark photographs on a Java stack on this publish. I did the watermark manually as a result of I did not discover any present library. Subsequent week, I am going to present a no-code method primarily based on infrastructure elements.

To Go Additional

Share This Article
Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Exit mobile version