From 897b4e8b9cc9cfc110d4b12808b53c5f7876d9aa Mon Sep 17 00:00:00 2001 From: orbiter Date: Sat, 7 May 2011 07:45:02 +0000 Subject: [PATCH] another hack to prevent black images git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7706 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/ViewImage.java | 147 +++--------------------------------------- 1 file changed, 10 insertions(+), 137 deletions(-) diff --git a/htroot/ViewImage.java b/htroot/ViewImage.java index b656a7893..a2c2046a1 100644 --- a/htroot/ViewImage.java +++ b/htroot/ViewImage.java @@ -23,6 +23,8 @@ import java.awt.Container; import java.awt.Image; import java.awt.MediaTracker; +import java.awt.image.BufferedImage; +import java.awt.image.Raster; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; @@ -89,136 +91,7 @@ public class ViewImage { // get the image as stream if (MemoryControl.shortStatus()) iconcache.clear(); - Image scaled = iconcache.get(urlString); - if (scaled == null) { - byte[] resourceb = null; - if (url != null) try { - resourceb = sb.loader.loadContent(sb.loader.request(url, false, true), CrawlProfile.CacheStrategy.IFEXIST); - } catch (IOException e) { - Log.logFine("ViewImage", "cannot load: " + e.getMessage()); - } - byte[] imgb = null; - if (resourceb == null) { - if (urlString.endsWith(".ico")) { - // load default favicon dfltfvcn.ico - if (defaulticonb == null) try { - imgb = FileUtils.read(new File(sb.getAppPath(), defaulticon)); - } catch (final IOException e) { - return null; - } else { - imgb = defaulticonb; - } - } else { - return null; - } - } else { - final InputStream imgStream = new ByteArrayInputStream(resourceb); - - // read image data - try { - imgb = FileUtils.read(imgStream); - } catch (final IOException e) { - return null; - } finally { - try { - imgStream.close(); - } catch (final Exception e) {/* ignore this */} - } - } - - // read image - final Image image = ImageParser.parse(urlString, imgb); - - if (image == null || (auth && (width == 0 || height == 0) && maxwidth == 0 && maxheight == 0)) return image; - - // find original size - final int h = image.getHeight(null); - final int w = image.getWidth(null); - - // in case of not-authorized access shrink the image to prevent - // copyright problems, so that images are not larger than thumbnails - if (auth) { - maxwidth = (maxwidth == 0) ? w : maxwidth; - maxheight = (maxheight == 0) ? h : maxheight; - } else if ((w > 16) || (h > 16)) { - maxwidth = Math.min(96, w); - maxheight = Math.min(96, h); - } else { - maxwidth = 16; - maxheight = 16; - } - - // calculate width & height from maxwidth & maxheight - if ((maxwidth < w) || (maxheight < h)) { - // scale image - final double hs = (w <= maxwidth) ? 1.0 : ((double) maxwidth) / ((double) w); - final double vs = (h <= maxheight) ? 1.0 : ((double) maxheight) / ((double) h); - double scale = Math.min(hs, vs); - //if (!auth) scale = Math.min(scale, 0.6); // this is for copyright purpose - if (scale < 1.0) { - width = Math.max(1, (int) (w * scale)); - height = Math.max(1, (int) (h * scale)); - } else { - width = Math.max(1, w); - height = Math.max(1, h); - } - - // compute scaled image - scaled = ((w == width) && (h == height)) ? image : image.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING); - final MediaTracker mediaTracker = new MediaTracker(new Container()); - mediaTracker.addImage(scaled, 0); - try {mediaTracker.waitForID(0);} catch (final InterruptedException e) {} - } else { - // do not scale - width = w; - height = h; - scaled = image; - } - - if ((height == 16) && (width == 16) && (resourceb != null)) { - // this might be a favicon, store image to cache for faster re-load later on - iconcache.put(urlString, scaled); - } - } - - return scaled; - } - - /* - public static BufferedImage respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { - - final Switchboard sb = (Switchboard)env; - - // the url to the image can be either submitted with an url in clear text, or using a license key - // if the url is given as clear text, the user must be authorized as admin - // the license can be used also from non-authorized users - - String urlString = post.get("url", ""); - final String urlLicense = post.get("code", ""); - final boolean auth = (header.get(HeaderFramework.CONNECTION_PROP_CLIENTIP, "")).equals("localhost") || sb.verifyAuthentication(header, true); // handle access rights - - DigestURI url = null; - if ((urlString.length() > 0) && (auth)) try { - url = new DigestURI(urlString); - } catch (final MalformedURLException e1) { - url = null; - } - - if ((url == null) && (urlLicense.length() > 0)) { - url = sb.licensedURLs.releaseLicense(urlLicense); - urlString = (url == null) ? null : url.toNormalform(true, true); - } - - if (urlString == null) return null; - - int width = post.getInt("width", 0); - int height = post.getInt("height", 0); - int maxwidth = post.getInt("maxwidth", 0); - int maxheight = post.getInt("maxheight", 0); - - // get the image as stream - if (MemoryControl.shortStatus()) iconcache.clear(); - BufferedImage image = iconcache.get(urlString); + Image image = iconcache.get(urlString); if (image == null) { byte[] resourceb = null; if (url != null) try { @@ -261,8 +134,8 @@ public class ViewImage { if (image == null || (auth && (width == 0 || height == 0) && maxwidth == 0 && maxheight == 0)) return image; // find original size - final int h = image.getHeight(); - final int w = image.getWidth(); + final int h = image.getHeight(null); + final int w = image.getWidth(null); // in case of not-authorized access shrink the image to prevent // copyright problems, so that images are not larger than thumbnails @@ -305,10 +178,10 @@ public class ViewImage { i.createGraphics().drawImage(scaled, 0, 0, width, height, null); image = i; // check outcome - //Raster raster = i.getData(); - //int[] pixel = new int[3]; - //pixel = raster.getPixel(0, 0, pixel); - //if (pixel[0] != 0 || pixel[1] != 0 || pixel[2] != 0) image = i; + Raster raster = i.getData(); + int[] pixel = new int[3]; + pixel = raster.getPixel(0, 0, pixel); + if (pixel[0] != 0 || pixel[1] != 0 || pixel[2] != 0) image = i; } catch (Exception e) { //java.lang.ClassCastException: [I cannot be cast to [B } @@ -328,5 +201,5 @@ public class ViewImage { return image; } - */ + }