[英]How to put image to PDF using iText without losing image quality?
我正在使用此代碼:
Bitmap itemImage = reduceImageAtFilePathFromGallery(imageName);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
itemImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
imageAnswer = Image.getInstance(stream.toByteArray());
private Bitmap reduceImageAtFilePathFromGallery(String filePath) {
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, o);
// The new size we want to scale to
final int REQUIRED_SIZE = 256;
// Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2);
return bitmap;
}
但是圖像質量變差。 然后,我還嘗試了以下代碼:
Image imageAnswer = getAndResizeImage(imageName);
private Image getAndResizeImage(String imageFilename){
final File imageFile = new File(imageFilename);
if (imageFile.exists()) {
Bitmap b = null;
try {
File f = new File(imageFilename);
b = BitmapFactory.decodeFile(f.getAbsolutePath());
//calculate how many bytes our image consists of.
int bytes = getSizeInBytes(b);
ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer
b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer
byte[] array = buffer.array(); //Get the underlying array containing the data.
Image image = Image.getInstance(array);
return image;
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
它給出了這個錯誤:
09-09 15:08:58.368:W / S
ystem.err(1385):java.io.IOException:字節數組不是可識別的圖像格式。 09-09 15:08:58.378:W / System.err(1385):at com.itextpdf.text.Image.getInstance(Image.java:442)09-09
在這行代碼上:
Image image = Image.getInstance(array);
有什么辦法可以使用iText在PDF上獲得高質量的圖像?
使用JPEG壓縮格式而不是PNG
itemImage.compress(Bitmap.CompressFormat.JPEG, 100, stream);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.