Warning: session_start(): open(/var/lib/php/sessions/sess_j283io7m3tlb0gap54tteqfdck, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!636
!629 // standard functions
!658 // image classes
import java.awt.*;
import java.awt.image.*;
import java.util.List;
import javax.imageio.*;
public class main {
public static void main(String[] args) {
JFrame frame = new JFrame("A JavaX Frame");
final ImageSurface imageSurface = new ImageSurface();
Component panel = imageSurface;
frame.add(panel);
frame.setBounds(100, 100, 500, 400);
frame.setVisible(true);
exitOnFrameClose(frame);
new Thread() {
public void run() {
RGBImage originalImage = loadImage("#1000326"); // Bryan Cranston!
originalImage = resizeToWidth(originalImage, 100);
reproduceOpenEnd(originalImage, imageSurface);
}
}.start();
}
static void reproduceOpenEnd(RGBImage original, ImageSurface imageSurface) {
double bestScore = 2.0;
RGBImage bestImage = null;
for (int ntry = 1; ; ntry++) {
System.out.println("Try " + ntry + ", score: " + bestScore);
RGBImage image = reproduce(original, ntry);
double score = diff(original, image);
if (score <= bestScore) {
System.out.println("New best! " + score);
bestScore = score;
bestImage = image;
imageSurface.setImage(image);
}
if (score == 0.0)
break;
}
}
// main reproduce function
static RGBImage reproduce(RGBImage original, int ntry) {
int w = original.getWidth(), h = original.getHeight();
int n = ntry % 2;
RGBImage image = new RGBImage(w, h, Color.white);
double splitPoint = random();
RGB col1 = probeRandomPixel(original);
RGB col2 = probeRandomPixel(original);
vsplit(image, splitPoint, col1, col2);
return image;
}
static RGB probeRandomPixel(RGBImage image) {
int x = (int) (random()*(image.getWidth()-1));
int y = (int) (random()*(image.getHeight()-1));
return image.getPixel(x, y);
}
static RGBImage resizeToWidth(RGBImage image, int w) {
return resize(image, w, (int) ((image.getHeight()*(double) w)/image.getWidth()));
}
public static RGBImage resize(RGBImage image, int w, int h) {
if (w == image.getWidth() && h == image.getHeight()) return image;
int[] pixels = new int[w*h];
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
pixels[y*w+x] = image.getInt(x*image.getWidth()/w, y*image.getHeight()/h);
return new RGBImage(w, h, pixels);
}
static boolean useImageCache = true;
static RGBImage loadImage(String snippetID) {
try {
File dir = new File(System.getProperty("user.home"), ".tinybrain/image-cache");
if (useImageCache) {
dir.mkdirs();
File file = new File(dir, snippetID + ".png");
if (file.exists() && file.length() != 0)
try {
return new RGBImage(ImageIO.read(file));
} catch (Throwable e) {
e.printStackTrace();
// fall back to loading from sourceforge
}
}
String imageURL = getImageURL(parseSnippetID(snippetID));
System.err.println("Loading image: " + imageURL);
BufferedImage image = ImageIO.read(new URL(imageURL));
if (useImageCache) {
File tempFile = new File(dir, snippetID + ".tmp." + System.currentTimeMillis());
ImageIO.write(image, "png", tempFile);
tempFile.renameTo(new File(dir, snippetID + ".png"));
//Log.info("Cached image.");
}
//Log.info("Loaded image.");
return new RGBImage(image);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
static String getImageURL(long snippetID) throws IOException {
String url;
if (snippetID == 1000010 || snippetID == 1000012)
url = "http://tinybrain.de:8080/tb/show-blobimage.php?id=" + snippetID;
else
url = "http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_" + snippetID
+ "&contentType=image/png";
return url;
}
public static long parseSnippetID(String snippetID) {
return Long.parseLong(shortenSnippetID(snippetID));
}
private static String shortenSnippetID(String snippetID) {
if (snippetID.startsWith("#"))
snippetID = snippetID.substring(1);
String httpBlaBla = "http://tinybrain.de/";
if (snippetID.startsWith(httpBlaBla))
snippetID = snippetID.substring(httpBlaBla.length());
return snippetID;
}
static Random _random = new Random();
static double random() {
return _random.nextInt(100001)/100000.0;
}
static void vsplit(RGBImage img, double splitPoint, RGB col1, RGB col2) {
int w = img.getWidth(), h = img.getHeight();
for (int yy = 0; yy < h; yy++)
for (int xx = 0; xx < w; xx++) {
double x = ((double) xx)/(w-1);
double y = ((double) yy)/(h-1);
RGB col = y <= splitPoint ? col1 : col2;
img.setPixel(xx, yy, col);
}
}
public static double pixelDiff(RGB a, RGB b) {
return (Math.abs(a.r-b.r) + Math.abs(a.g-b.g) + Math.abs(a.b-b.b))/3;
}
public static double diff(RGBImage image, RGBImage image2) {
int w = image.getWidth(), h = image.getHeight();
double sum = 0;
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
sum += pixelDiff(image.getRGB(x, y), image2.getRGB(x, y));
return sum/(w*h);
}
}