Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions src/main/java/org/jlibvips/VipsImage.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.sun.jna.Pointer;

import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

/**
* An image, residing in memory or disk, managed by libvips. Instance methods provide transformations and queries on
Expand Down Expand Up @@ -55,6 +57,27 @@ public static VipsImage fromPdf(Path p, int page) {
return image;
}

public static List<VipsImage> getPagesFromPdf(Path p, int MAX_PAGES){
List<VipsImage> pages = new ArrayList<>();
try {
VipsImage first = fromPdf(p, 0);
pages.add(first);

for (int i = 1; i < Math.min(first.getPages(), MAX_PAGES); i++) {
VipsImage page = fromPdf(p, i);
pages.add(page);
}
}
catch (Exception exception) {
throw new CouldNotLoadPdfVipsException(-1);
}
return pages;
}

public static int init(){
return VipsBindings.INSTANCE.vips_init("application");
}

/**
* Loads a PDF document's page as {@link VipsImage} in the greatest possible resolution.
*
Expand Down Expand Up @@ -189,6 +212,10 @@ public int getWidth() {
return VipsBindings.INSTANCE.vips_image_get_width(ptr);
}

public int getPages() {
return VipsBindings.INSTANCE.vips_image_get_n_pages(ptr);
}

/**
* Get the height of this image.
*
Expand All @@ -209,6 +236,11 @@ public int getBands() {
return VipsBindings.INSTANCE.vips_image_get_bands(ptr);
}

public VipsImage getGrids() {
var out = new Pointer[getPages()];
VipsBindings.INSTANCE.vips_grid(this.ptr, out, getHeight()/getPages(), getPages(), 1, null);
return new VipsImage(out[0]);
}
/**
* Insert sub into main at position.
*
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/org/jlibvips/jna/VipsBindings.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,31 @@ public interface VipsBindings extends Library {

VipsBindings INSTANCE = Native.load("libvips.42.dylib", VipsBindings.class);

int vips_init(String argv0);

Pointer vips_image_new_from_file(String fileName, Object...args);

int vips_pdfload(String fileName, Pointer[] pointer, Object...args);

int vips_image_get_width(Pointer pointer);
int vips_image_get_height(Pointer pointer);
int vips_image_get_n_pages(Pointer pointer);

int vips_image_get_bands(Pointer pointer);

int vips_grid(Pointer in, Pointer[] out, int tile_height, int across, int down, Object...args);

int vips_dzsave(Pointer pointer, String outDir, Object...args);

int vips_thumbnail_image(Pointer in, Pointer[] out, int width, Object...args);

int vips_extract_area(Pointer in, Pointer[] out, int left, int top, int width, int height, Object...args);

Pointer vips_array_double_new(double[] array, int n);

int vips_vipssave(Pointer in, String filename, Object...args);
int vips_jpegsave(Pointer in, String filename, Object...args);
int vips_pngsave(Pointer in, String filename, Object...args);
int vips_webpsave(Pointer in, String filename, Object...args);

int vips_insert(Pointer main, Pointer sub, Pointer[] out, int x, int y, Object...args);
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/org/jlibvips/operations/JpegSaveOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileAttribute;

public class JpegSaveOperation implements SaveOperation {

Expand Down Expand Up @@ -45,6 +47,23 @@ public Path save() throws IOException, VipsException {
return path;
}

public Path saveAsPng(String pathStr) throws IOException, VipsException {
Path path = Files.createFile(Paths.get(pathStr).toAbsolutePath());
int ret = VipsBindings.INSTANCE.vips_pngsave(image.getPtr(), path.toString(),
new Varargs().add("Q", quality)
.add("optimize_coding", VipsUtils.booleanToInteger(optimizeCoding))
.add("interlace", VipsUtils.booleanToInteger(interlace))
.add("strip", VipsUtils.booleanToInteger(strip))
.add("no_subsample", VipsUtils.booleanToInteger(noSubsample))
.add("trellis_quant", VipsUtils.booleanToInteger(trellisQuant))
.add("overshoot_deringing", VipsUtils.booleanToInteger(overshootDeringing))
.add("optimize_scans", optimizeScans).toArray());
if(ret != 0) {
throw new VipsException("vips_pngsave", ret);
}
return path;
}

/**
* Set the quality factor.
*
Expand Down