Guten Morgen, hat jemand eine Idee, wie die maximale Auflösung eines (nicht-korrupten) Bildes (Bildinhalt egal, irgendein gängiges Bildformat, kein Vektor-Format wie SVG) sein kann, das eine maximale Dateigröße von 1MB hat? zB. Könnten Bildformate, die RLE verwenden (PCX, BMP) wahrscheinlich recht gute Auflösung erreichen, ich weiß es aber nicht genau ... Hat jemand eine Idee? Grüße, Mampf
Ein leeres Gif Bild 65536x65536 Pixel kann man unter 0.1kB anlegen.
Mampf schrieb: > hat jemand eine Idee, wie die maximale Auflösung eines (nicht-korrupten) > Bildes (Bildinhalt egal, irgendein gängiges Bildformat, kein > Vektor-Format wie SVG) sein kann, das eine maximale Dateigröße von 1MB > hat? wird wohl auf unentlich rauslaufen. TIFF mit Fax4 verwendet RLE. Wenn das bild komplett weiss oder schwarz ist ist die Auflösung nur durch die Datentypen in er Datei begrenzt.
Kommt aufs Format drauf an. Unkomprimiert bekommst du die Pixelanzahl über (Dateigröße-Overhead) / Farbtiefe Bei komprimierten Formaten (z.B. JPG) kommt es ganz auf die Komprimierungsstufe an.
Stawito schrieb: > Ein leeres Gif Bild 65536x65536 Pixel kann man unter 0.1kB anlegen. Ist es aber dann auch gültig? Der Huffmann-Decoder wird ja merken, wenn Bilddaten fehlen ... selbst, wenn der Encoder jedes Pixel mit 1Bit kodiert wird, wird die Datenmenge >0,1kB sein ... Ich weiß spontan garnicht, ob GIF Lauflängenkodierung kann ...
meinst du wirklich auflösung (dpi) oder eher bildgröße (pixel, punkt, cm, ...)?
Mampf schrieb: > Ist es aber dann auch gültig? > > Der Huffmann-Decoder wird ja merken, wenn Bilddaten fehlen ... selbst, Also Bilder werden in der Regel nicht mit Huffmann kodiert. Da wird in der Regel was mit "Lauflängen" gemacht. GIF benutzt ganz konkret LZW, welches wiederkehrende Pixelfolgen in einzelne Symbole übersetzt. Somit kommst Du auch bei Bildern weit unter einem Bit pro Pixel wenn Du einfarbige Bilder hast. Bei 16 Farben RLE BMPs bekommst Du bei Farbe x pro 16 Pixel ein Byte. Macht ein halbes Bit pro Pixel. Bei 256 Farben RLE kannst Du sogar 256 gleichfarbige Pixel pro 2 Bytes übertragen. Das macht 1/16tel Bit pro Pixel.
Schonmal danke für eure Antworten ... Der Grund wieso ich frage ... Ich arbeite an einer Web-Plattform, die den Upload von Bildern ermöglicht. Im Backend arbeitet Java, das per HTTPServlet das Bild empfängt. Meine Sorge ist, dass man das Exploiten kann ... 1MB Bild, aber Dimensionen zB 64k*64k. Wenn Java versuchen würde, ein solches Bild zB zu verkleinern, müsste es dieses ja erstmal dekomprimieren. Ich frag mich, ob man so eine komplette VM (inkl Tomcat) abschießen könnte ...
Nun, du kannst ja auch erstmal in den Header reingucken, wie groß es denn sein wird. Die Upload-Größe ist ja ohnehin beschränkt. Entweder steht nun im Header was Brauchbares drin, also eine realistische Größe. Dann kannst du ruhig dekomprimieren und so weiter. Oder da steht schon Unfug drin, dann hat sich das Thema doch erledigt.
Stawito schrieb: > Ein leeres Gif Bild 65536x65536 Pixel kann man unter 0.1kB anlegen. Und wie wäre die Dateigrösse, wenn man in der Mitte des 65536x65536 Bildes einen einzelnen schwarzen Punkt hätte? Gruss Harald
Mampf schrieb: > Ich frag mich, ob man so eine komplette VM (inkl Tomcat) abschießen > könnte ... Ich denke mal, wenn Du so was verwendest, dann sind die bis zu 12 Gigabyte die solch ein Bild maximal an Speicher brauchen könnte, auch egal. :)
Wie wär's mit http://www.imagemagick.org/ → "Image identification" ImageMagick hat auch ne Java-API: JMagick
Mampf schrieb: > Meine Sorge ist, dass man das Exploiten kann ... 1MB Bild, aber > Dimensionen zB 64k*64k. Wenn Java versuchen würde, ein solches Bild zB > zu verkleinern, müsste es dieses ja erstmal dekomprimieren. Erstmal wird Java versuchen entsprechend Speicher zu reservieren, dies wird fehlschlagen und der Betrieb geht bei passender Fehlerbehandlung ganz normal weiter...
Die JPEG-Lib (referenzimpl) hat IIRC ne API-Funktion, um ein JPEG gleich von Anfang an in einer niedrigeren Auflösung zu dekomprimieren, damit kriegt man die Megapixel-Monster auch ohne Gigabytes an Ram gelesen. Wenn das nicht reicht, oder schlechte Qualität liefert: JPEG kann auch Zeilenweise (Zeilenblockweise) dekomprimieren, dann reichen dir z.B. 32 Zeilen des Bildes auf einmal im Ram, und du kannst troztdem bikubisch interpolieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.