59
59
import java.awt.image.ImageProducer;
60
60
import java.awt.image.Kernel;
61
61
import java.awt.image.RGBImageFilter;
62
import java.io.ByteArrayInputStream;
63
62
import java.io.ByteArrayOutputStream;
64
63
import java.io.IOException;
65
64
import java.io.InputStream;
66
65
import java.net.URL;
66
import java.nio.CharBuffer;
67
import java.nio.charset.Charset;
67
68
import java.util.HashMap;
69
70
import javax.imageio.ImageIO;
79
80
import org.appwork.utils.ImageProvider.ImageProvider;
80
81
import org.appwork.utils.net.Base64InputStream;
81
82
import org.appwork.utils.net.Base64OutputStream;
83
import org.appwork.utils.net.CharSequenceInputStream;
83
85
public class IconIO {
84
86
public static class ScaledIcon implements Icon, IDIcon {
188
190
public final int filterRGB(final int x, final int y, final int rgb) {
189
191
final int r = (rgb & 0xFF0000) >> 16;
190
final int g = (rgb & 0xFF00) >> 8;
191
final int b = rgb & 0xFF;
192
if (r >= r1 && r <= r2 && g >= g1 && g <= g2 && b >= b1 && b <= b2) {
193
// Set fully transparent but keep color
194
// calculate a alpha value based on the distance between the
195
// range borders and the pixel color
196
final int dist = (Math.abs(r - (r1 + r2) / 2) + Math.abs(g - (g1 + g2) / 2) + Math.abs(b - (b1 + b2) / 2)) * 2;
197
return new Color(r, g, b, Math.min(255, dist)).getRGB();
192
final int g = (rgb & 0xFF00) >> 8;
193
final int b = rgb & 0xFF;
194
if (r >= r1 && r <= r2 && g >= g1 && g <= g2 && b >= b1 && b <= b2) {
195
// Set fully transparent but keep color
196
// calculate a alpha value based on the distance between the
197
// range borders and the pixel color
198
final int dist = (Math.abs(r - (r1 + r2) / 2) + Math.abs(g - (g1 + g2) / 2) + Math.abs(b - (b1 + b2) / 2)) * 2;
199
return new Color(r, g, b, Math.min(255, dist)).getRGB();
202
204
final ImageProducer ip = new FilteredImageSource(image.getSource(), filter);
885
887
public static Image getImageFromDataUrl(String dataURL) throws IOException {
886
888
final int base64Index = dataURL.indexOf(";base64,");
887
890
if (base64Index > 0 && base64Index + 8 < dataURL.length()) {
888
dataURL = dataURL.substring(base64Index + 8);
891
cb = CharBuffer.wrap(dataURL, base64Index + 8, dataURL.length());
893
cb = CharBuffer.wrap(dataURL);
890
final Base64InputStream is = new Base64InputStream(new ByteArrayInputStream(dataURL.getBytes("UTF-8")));
895
final Base64InputStream is = new Base64InputStream(new CharSequenceInputStream(cb, Charset.forName("UTF-8")));
891
896
return ImageIO.read(is);