MyImage_ohne_A_mit_A.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import java.awt.Color;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import javax.imageio.ImageIO;
  6. import flanagan.io.Db;
  7. import flanagan.io.FileNameSelector;
  8. import java.util.regex.Pattern;
  9. public class MyImage_ohne_A_mit_A {
  10. public static void main(String [] args) {
  11. /**
  12. * 1. Geben Sie den Namen des Input-Files an.
  13. * 2. Geben Sie den Namen des Output-Files an
  14. *
  15. * @author (your name)
  16. * @version (a version number or a date)
  17. */
  18. boolean answer = false, file_exist = false;
  19. String inFileName, inFileNamePfad, outFileName, outFileNamePfad, outFormat = "";
  20. FileNameSelector fc = new FileNameSelector("Images/");
  21. // fc.setPath("Images/");
  22. File fin = null, fout = null;
  23. while (!answer && !file_exist) {
  24. inFileName = fc.selectFile("Wähle das Input-File:");
  25. // System.out.println(fc.getPathName());
  26. inFileNamePfad = "Images/" + inFileName;
  27. // System.out.println("inFileNamePfad = " + inFileNamePfad);
  28. fin = new File(inFileNamePfad); // input file path
  29. String [] inFileName_Teil = inFileName.split(Pattern.quote(".")); // Ermitteln den Stamm- und die Erweiterung-Teile von inFileName:
  30. // inFileName_Teil[0] = Stammname, inFileName_Teil[1] = Erweiterung (png, jpg, ...)
  31. outFileName = Db.readLine("Geben Sie den Namen des Output-Files MIT einer Erweiterung (png, jpg, etc.) ein" + "\n" +
  32. "und drücken die ENTER-Taste für Bestätigung!", inFileName_Teil[0] + ".jpg");
  33. String [] outFileName_Teil = outFileName.split(Pattern.quote(".")); // Ermitteln den Stamm- und die Erweiterung-Teile von outFileName:
  34. // outFileName_Teil[0] = Stammname, outFileName_Teil[1] = Erweiterung (png, jpg, ...)
  35. outFileNamePfad = "Images/" + outFileName;
  36. outFormat = outFileName_Teil[1].trim();
  37. fout = new File(outFileNamePfad); // output file path
  38. if (inFileNamePfad.equals(outFileNamePfad)) {
  39. file_exist = Db.noYes("Die Input- und Output-Bilddateien haben die gleichen Namen!" + "\n" +
  40. "Möchten Sie trotzdem fortsetzen?");
  41. if (!file_exist) {
  42. // file_exist = false;
  43. System.out.println("file_exist = " + file_exist + " answer = " + answer);
  44. continue;
  45. }
  46. }
  47. answer = Db.yesNo("Die Angaben lauten:" + "\n" +
  48. "Input-Bilddatei: " + "\"" + inFileNamePfad + "\"" + "\n" +
  49. "Output-Bilddatei: " + "\"" + outFileNamePfad + "\"" + "\n" +
  50. "Die Ertweiterung des Input-Files: " + "\"" + inFileName_Teil[1] + "\"" + "\n" +
  51. "Die Ertweiterung des Output-Files: " + "\"" + outFileName_Teil[1] + "\"" + "\n\n" +
  52. "Sind Sie damit einverstanden?");
  53. }
  54. BufferedImage image_on_disk = null, image_memory = null;
  55. boolean Alpha;
  56. //******************** Image einlesen ************************
  57. try {
  58. image_on_disk = ImageIO.read(fin);
  59. System.out.println("Reading " + fin + " complete !"); } // end try
  60. catch(IOException e){
  61. System.out.println("Error: " + e); } // end catch
  62. int width = image_on_disk.getWidth(); // Breite des Images
  63. int height = image_on_disk.getHeight(); // Höhe des Images
  64. System.out.println("\n" + "width = " + width + " height = " + height + "\n");
  65. if (image_on_disk.getColorModel().hasAlpha()) {
  66. Alpha = true;
  67. System.out.println("Die Datei HAT Alpha-Kanal\n"); // image_on_disk hat A-Kanal
  68. } else {
  69. Alpha = false;
  70. System.out.println("Die Datei hat KEINEN Alpha-Kanal\n"); // image_on_disk hat keinen A-Kanal
  71. }
  72. //******************** Image kreieren und anpassen **********************
  73. if (outFormat.equals("png") && Alpha) { // png4 <-> png4
  74. // System.out.println("Wir sind da: 1\n");
  75. image_memory = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); // Typ TYPE_INT_ARGB, 4 Kanäle: ARGB,d.h. MIT Alpha-Kanal
  76. // Kreieren das GLEICHE 4-Kanal Image wie image_on_disk und mit Aufrechtserhaltung des Alpha-Kanals
  77. image_memory.createGraphics().drawImage(image_on_disk, 0, 0, null);
  78. }
  79. else { // png4/3 -> jpg oder png3 -> png3 oder jpg -> png3
  80. // System.out.println("Wir sind da: 2\n");
  81. image_memory = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // Typ TYPE_INT_RGB, 3 Kanäle: RGB, d.h. OHNE Alpha-Kanal
  82. // Kreieren ein Image mit der gleichen Breite and Höhe wie image_on_disk und WEISSEM Hintergrund zum Erzeten des A-Kanal
  83. image_memory.createGraphics().drawImage(image_on_disk, 0, 0, Color.WHITE, null);
  84. }
  85. //******************** Image schreiben ************************
  86. try {
  87. ImageIO.write(image_memory, outFormat, fout);
  88. System.out.println("Writing " + fout + " complete !"); } // end try
  89. catch(IOException e) {
  90. System.out.println("Error: " + e); } // end catch
  91. System.exit(1); // Programm beenden
  92. } // end main
  93. } // end class MyImage_ohne_A_mit_A