1 package com.melloware.jukes.file.image;
2
3 import java.awt.Graphics2D;
4 import java.awt.Image;
5 import java.awt.MediaTracker;
6 import java.awt.image.BufferedImage;
7 import java.io.File;
8 import java.io.IOException;
9 import java.net.MalformedURLException;
10 import java.net.URL;
11 import java.util.Locale;
12
13 import javax.imageio.ImageIO;
14 import javax.swing.ImageIcon;
15
16 import org.apache.commons.lang.StringUtils;
17 import org.apache.commons.lang.SystemUtils;
18
19 import com.melloware.jukes.file.FileUtil;
20 import com.melloware.jukes.file.filter.ImageFilter;
21
22
23
24
25
26
27
28
29
30
31
32 public final class ImageFactory {
33
34 public static final ImageIcon ICO_TRAYICON;
35 public static final ImageIcon ICO_TRAYPLAY;
36 public static final ImageIcon ICO_TRAYPAUSE;
37 public static final ImageIcon ICO_TRAYSTOP;
38 public static final ImageIcon IMAGE_NOCOVER;
39
40 static {
41 if (SystemUtils.IS_OS_WINDOWS) {
42 ICO_TRAYICON = getIcon("images/trayicon.png");
43 ICO_TRAYPLAY = getIcon("images/trayplay.png");
44 ICO_TRAYPAUSE = getIcon("images/traypause.png");
45 ICO_TRAYSTOP = getIcon("images/traystop.png");
46 } else {
47 ICO_TRAYICON = getIcon("images/tray_icon_24x24.png");
48 ICO_TRAYPLAY = getIcon("images/tray_play_24x24.png");
49 ICO_TRAYPAUSE = getIcon("images/tray_pause_24x24.png");
50 ICO_TRAYSTOP = getIcon("images/tray_stop_24x24.png");
51 }
52
53 IMAGE_NOCOVER = getIcon("images/image_nocover.jpg");
54 }
55
56
57
58
59 private ImageFactory() {
60 super();
61 }
62
63
64
65
66
67
68
69 public static ImageIcon getDiscImage(final String aFileName) {
70 return getScaledImage(aFileName, 300, 300);
71 }
72
73
74
75
76
77
78
79 public static ImageIcon getIconFromFile(final String aFileName) {
80 return new ImageIcon(aFileName);
81 }
82
83
84
85
86
87
88
89
90 public static Image getImageFromUrl(final String aUrl) {
91 Image image = null;
92 if (StringUtils.isBlank(aUrl)) {
93 throw new IllegalArgumentException("aUrl must be specified");
94 }
95
96 try {
97 final URL url = new URL(aUrl);
98 image = ImageIO.read(url);
99 } catch (MalformedURLException ex) {
100 image = null;
101 } catch (IOException ex) {
102 image = null;
103 }
104 return image;
105 }
106
107
108
109
110
111
112
113
114
115 public static ImageIcon getScaledImage(final String aFileName, final int height, final int width) {
116 ImageIcon icon = null;
117 if (StringUtils.isBlank(aFileName)) {
118 icon = IMAGE_NOCOVER;
119 } else {
120
121 icon = new ImageIcon(aFileName);
122 }
123
124
125 if (MediaTracker.ERRORED == icon.getImageLoadStatus()) {
126 icon = IMAGE_NOCOVER;
127 }
128
129
130 final Image image = icon.getImage().getScaledInstance(height, width, Image.SCALE_DEFAULT);
131
132 return new ImageIcon(image);
133 }
134
135
136
137
138
139
140
141
142 public static File saveImage(final Image image, final String filename)
143 throws IOException {
144 final int w = image.getHeight(null);
145 final int h = image.getHeight(null);
146 final BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
147 final Graphics2D g2 = bi.createGraphics();
148 g2.drawImage(image, 0, 0, null);
149 g2.dispose();
150 final File file = new File(filename);
151 ImageIO.write(bi, "jpg", file);
152 return file;
153 }
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 public static String saveImageWithFileFormat(final Image image,
174 final String aFormat,
175 final String aDirectory,
176 final String aArtist,
177 final String aDisc)
178 throws IOException {
179 String result = null;
180 String newFileName = aFormat;
181 newFileName = StringUtils.replace(newFileName, "%a", aArtist);
182 newFileName = StringUtils.replace(newFileName, "%d", aDisc);
183 newFileName = StringUtils.replace(newFileName, "%A", aArtist.toUpperCase(Locale.US));
184 newFileName = StringUtils.replace(newFileName, "%D", aDisc.toUpperCase(Locale.US));
185 newFileName = FileUtil.correctFileName(newFileName);
186 newFileName = aDirectory + SystemUtils.FILE_SEPARATOR + newFileName + "." + ImageFilter.JPG;
187
188 result = newFileName;
189
190 saveImage(image, newFileName);
191
192 return result;
193 }
194
195
196
197
198
199
200
201 private static ImageIcon getIcon(final String aFileName) {
202 return new ImageIcon(ClassLoader.getSystemResource(aFileName));
203 }
204 }