Skip to content
This repository was archived by the owner on Apr 14, 2025. It is now read-only.

Commit e11404f

Browse files
Add speed and dithering settings to the wrapper
1 parent 28efae6 commit e11404f

2 files changed

Lines changed: 26 additions & 10 deletions

File tree

pngquant-android/src/main/java/com/nicdahlquist/pngquant/LibPngQuant.java

100644100755
Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,42 @@
44

55
public class LibPngQuant {
66

7+
public boolean pngQuantFile(File inputFile, File outputFile) {
8+
//Use default quality in the windows batch file bundled with pngQuant
9+
return pngQuantFile(inputFile, outputFile,50,100);
10+
}
11+
712
public boolean pngQuantFile(File inputFile, File outputFile, int minQuality, int maxQuality) {
13+
//Use lowest speed to get the best quality
14+
return pngQuantFile(inputFile, outputFile, minQuality, maxQuality, 1);
15+
}
16+
17+
public boolean pngQuantFile(File inputFile, File outputFile, int minQuality, int maxQuality, int speed) {
18+
//Use the default dither value.
19+
return pngQuantFile(inputFile, outputFile, minQuality, maxQuality, speed, 1f);
20+
}
21+
22+
public boolean pngQuantFile(File inputFile, File outputFile, int minQuality, int maxQuality, int speed, float floydDitherAmount) {
823
if (inputFile == null) throw new NullPointerException();
924
if (!inputFile.exists()) throw new IllegalArgumentException();
1025
if (outputFile == null) throw new NullPointerException();
1126
if (outputFile.length() != 0) throw new IllegalArgumentException();
12-
if(minQuality >= maxQuality) throw new IllegalArgumentException();
13-
if( (minQuality < 0) || (minQuality > 100) ) throw new IllegalArgumentException();
14-
if( (maxQuality < 0) || (maxQuality > 100) ) throw new IllegalArgumentException();
15-
27+
if (maxQuality < 0 || maxQuality > 100) throw new IllegalArgumentException();
28+
if (minQuality < 0 || minQuality > 100) throw new IllegalArgumentException();
29+
if (maxQuality < minQuality) throw new IllegalArgumentException();
30+
if (speed < 1 || speed > 11) throw new IllegalArgumentException();
31+
if (floydDitherAmount < 0f || floydDitherAmount > 1f) throw new IllegalArgumentException();
1632

1733
String inputFilename = inputFile.getAbsolutePath();
1834
String outputFilename = outputFile.getAbsolutePath();
1935

20-
return nativePngQuantFile(inputFilename, outputFilename, minQuality, maxQuality);
36+
return nativePngQuantFile(inputFilename, outputFilename, minQuality, maxQuality, speed, floydDitherAmount);
2137
}
2238

2339
static {
2440
System.loadLibrary("pngquantandroid");
2541
}
2642

27-
private static native boolean nativePngQuantFile(String inputFilename, String outputFilename,int minQuality, int maxQuality);
43+
private static native boolean nativePngQuantFile(String inputFilename, String outputFilename, int minQuality, int maxQuality, int speed, float floydDitherAmount);
2844

2945
}

pngquant-android/src/main/jni/native_glue.c

100644100755
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ static void log_callback(const liq_attr * attr, const char * msg, void * user_in
2121
LOGI("%s" ,msg);
2222
}
2323

24-
JNIEXPORT jboolean JNICALL Java_com_nicdahlquist_pngquant_LibPngQuant_nativePngQuantFile(JNIEnv * env, jobject obj, jstring jInFilename, jstring jOutFilename,jint jminQuality, jint jmaxQuality) {
24+
JNIEXPORT jboolean JNICALL Java_com_nicdahlquist_pngquant_LibPngQuant_nativePngQuantFile(JNIEnv * env, jobject obj, jstring jInFilename, jstring jOutFilename, int jMinQuality, int jMaxQuality, int jSpeed, float jFloyd){
2525
const char * inFilename = (*env)->GetStringUTFChars(env, jInFilename, 0);
2626
const char * outFilename = (*env)->GetStringUTFChars(env, jOutFilename, 0);
2727

2828
struct pngquant_options options = {
29-
.floyd = 1.f, // floyd-steinberg dithering
29+
.floyd = jFloyd, // floyd-steinberg dithering
3030
};
3131
options.liq = liq_attr_create();
3232

3333
options.verbose = true;
34+
liq_set_quality(options.liq, jMinQuality, jMaxQuality);
35+
liq_set_speed(options.liq, jSpeed);
3436
liq_set_log_callback(options.liq, log_callback, NULL);
3537
options.log_callback = log_callback;
36-
liq_set_quality(options.liq, jminQuality, jmaxQuality);
37-
3838

3939
pngquant_file(inFilename, outFilename, &options);
4040

0 commit comments

Comments
 (0)