Skip to content

kdekooter/jlibvips

 
 

Repository files navigation

jlibvips

A Java interface to llibvips, the fast image processing library with low memory needs.

Dependency:

<dependency>
  <groupId>io.github.codecitizen</groupId>
  <artifactId>jlibvips</artifactId>
  <version>1.2.1</version>
</dependency>
implementation 'io.github.codecitizen:jlibvips:1.2.1'

Configure Path to libvips Library:

VipsBindingsSingleton.configure("/usr/local/lib/libvips.so");

Example: Generate a Thumbnail for a PDF.

package jlibvips.example;

import org.jlibvips.*;
import java.nio.file.Paths;
import java.nio.file.Files;

public class PDFThumbnailExample {
    
    public static void main(String[] args) {
        var image = VipsImage.fromPdf(Paths.get(args[0]), 0); // Second Parameter is the Page Number
        var thumbnail = image.thumbnail()
            .autoRotate()
            .create();
        image.unref();
        var thumbnailFile = thumbnail.jpeg()
            .quality(100)
            .strip()
            .save();
        thumbnail.unref();
        
        System.out.printf("Thumbnail generated in '%s'.%n", thumbnailFile.toString());                
        System.out.println("Done!");
    }
    
}

Example: Create an Image Pyramid from a large PNG File.

package jlibvips.example;

import org.jlibvips.VipsImage;
import java.nio.file.Paths;

public class ImagePyramidExample {
    
    public static void main(String[] args) {
        var image = VipsImage.fromFile(Paths.get(args[0]));
        var directory = Files.createTempDirectory("example-pyramid");
        image.deepZoom(directory)
            .layout(DeepZoomLayouts.Google)
            .container(DeepZoomContainer.FileSystem)
            .suffix(".jpg[Q=100]")
            .save();
        image.unref();
        System.out.printf("Pyramid generated in folder '%s'.%n", directory.toString());
        System.out.println("Done.");
    }
    
}

Example: Logging

package jlibvips.example;

import org.jlibvips.*;
import org.jlibvips.jna.glib.*;
import java.util.List;

public class LoggingExample {
  public static void main(String[] args) {
    // 1) Configure GLib JNA Mappings
    GLibBindingsSingleton.configure("path/to/glibc");
    // 2) Register Log Handler
    VipsImage.registerLogHandler(
            List.of(GLogLevelFlags.G_LOG_LEVEL_INFO,
                    GLogLevelFlags.G_LOG_LEVEL_DEBUG),
            (flag, message) -> System.out.printf("VIPS[%s]: %s", flag, message)
    );
    var image = VipsImage.fromPdf(Paths.get(args[0]), 0); // Second Parameter is the Page Number
    var thumbnail = image.thumbnail()
        .autoRotate()
        .create();
    image.unref();
    thumbnail.jpeg()
        .quality(100)
        .strip()
        .save();
    thumbnail.unref();
  }
}

Should deliver an Output like:

VIPS[G_LOG_LEVEL_INFO]: selected loader is image source
VIPS[G_LOG_LEVEL_INFO]: input size is 500 x 500
VIPS[G_LOG_LEVEL_INFO]: converting to processing space scrgb
VIPS[G_LOG_LEVEL_INFO]: shrinkv by 2
VIPS[G_LOG_LEVEL_INFO]: shrinkh by 2
VIPS[G_LOG_LEVEL_INFO]: residual reducev by 0.4
VIPS[G_LOG_LEVEL_INFO]: reducev: 16 point mask
VIPS[G_LOG_LEVEL_INFO]: residual reduceh by 0.4
VIPS[G_LOG_LEVEL_INFO]: reduceh: 16 point mask
VIPS[G_LOG_LEVEL_INFO]: cropping to 100x100
VIPS[G_LOG_LEVEL_INFO]: convi: using C path
VIPS[G_LOG_LEVEL_INFO]: residual reducev by 0.32
VIPS[G_LOG_LEVEL_INFO]: reducev: 7 point mask
VIPS[G_LOG_LEVEL_INFO]: residual reduceh by 0.32
VIPS[G_LOG_LEVEL_INFO]: reduceh: 7 point mask
VIPS[G_LOG_LEVEL_INFO]: gaussblur mask width 17
VIPS[G_LOG_LEVEL_INFO]: convi: using C path
VIPS[G_LOG_LEVEL_INFO]: convi: using C path

Packages

No packages published

Languages

  • Java 80.4%
  • Groovy 19.4%
  • Shell 0.2%