MyImage_ohne_A_mit_A.java 5.6 KB

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