2010-05-25 3 views
6

Sto trasmettendo le immagini su un file PDF utilizzando iText. Le immagini appaiono sempre più grandi di quanto dovrebbero. Secondo il libro (iText in Action), questo è perché iText visualizza sempre le immagini con una risoluzione di 72 dpi, indipendentemente da quale sia la proprietà dpi effettiva dell'immagine. Il libro suggerisce di utilizzare image.getDpiX() per trovare il dpi dell'immagine e quindi usare image.scalePercent (72/actualDpi * 100) per visualizzare correttamente l'immagine. Finora, la proprietà getDpiX() di tutte le mie immagini ha restituito 0 (ho provato 2 gif e 1 jpg). C'è un altro modo per capire il DPI reale in modo che le mie immagini si adattino correttamente?Ridimensionamento immagini Java

com.lowagie.text.Image graphic = com.lowagie.text.Image.getInstance(imgPath); 
float actualDpi = graphic.getDpiX(); 
if (actualDpi > 0) 
    //Never gets here 
    graphic.scalePercent(72f/actualDpi * 100); 

risposta

0

Per GIF, non c'è posto per memorizzare un'informazione "DPI" nel file, in modo da "actualDpi" non ha alcun significato in questo caso. Per JPEG, l'informazione "DPI" può essere memorizzata nel file, ma non è obbligatoria, e se non impostata: "actualDPI" non ha alcun significato. La vera risposta è: non esiste un "DPI reale", o l'informazione è fornita (cioè "in questa immagine voglio 1 pixel da renderizzare con questa specifica larghezza fisica (o altezza)"), o è non. Un altro elemento è nella frase: "appaiono sempre più grandi di quanto dovrebbero"; il "presunto" è l'informazione DPI memorizzata nell'immagine. Quindi se questa informazione è assente e senti che quando apri l'immagine sembra proprio sullo schermo, allora devi calcolare la densità dello schermo (larghezza in numero di pixel diviso per la larghezza in pollici dello schermo), e usalo come variabile "actualDPI".

1

Secondo il JavaDoc com.lowagie.text.Image, il metodo getDpiX ottiene il pollice punti per la direzione X. Restituisce zero se non disponibile.

È necessario assumere un valore quando il metodo getDpiX restituisce zero. 100 dpi è una buona ipotesi come qualsiasi.

if (actualDpi <= 0) actualDpi = 100f; 
graphic.scalePercent(72f/actualDpi * 100f); 
0

La risoluzione dello schermo, recuperato da

java.awt.Toolkit.getDefaultToolkit().getScreenResolution() 

non ha aiutato, immagine era ancora troppo grande. Tuttavia, è possibile ridimensionare l'immagine alla larghezza della pagina nel seguente modo:

BufferedImage bufferedImage = null; // your image 
Image image = Image.getInstance(bufferedImage,null); 
image.scalePercent((document.right()-document.left())/((float)image.getWidth())*100);