Monika Schwarzenberg: File Upload: Breite eines JPG-Bildes aus Byte Array ermitteln

Hallo zusammen,

ich habe ein Formular, mit dem ich kurze Texte und Bilder (JPG/GIF) in eine DB (SQL) hochladen kann (so eine Art Flohmarkt). Bevor das Bild hochgeladen wird, soll die Bildbreite überprüft werden, damit mir nicht das ganze Design auseinander gehauen wird. Aus technischen Gründen kann ich Perl oder PHP nicht benutzen, sondern bin darauf angewiesen die Bild-Daten in einen Byte Array zu laden und daraus die Bildbreite zu ermitteln. Für das Gif-Bild klappt das auch wunderbar, leider kriege ich für das JPG-Bild aber keine Werte.

Bin um jeden Hinweis oder alternative Ideen, wie ich an die Bildbreite komme dankbar.

Schon mal herzlichen Dank im voraus.
Moni.

Der verwendete Code:
<form zum hochladen....>
....

GIF-Bild, funktioniert...
function getPicSizeGIF(b)
{
var pic = new WebObject();
if(b.getAt(0) == 71 &&
b.getAt(1) == 73 &&
b.getAt(2) == 70 &&
b.getAt(3) == 56 &&
b.getAt(4) == 57)
{
pic["width"] = b.getAt(6) + b.getAt(7) * 256;
pic["height"] = b.getAt(8) + b.getAt(9) * 256;
}
return pic;
}

JPG-Bild, funktioniert nicht:
    function getPicSizeJPG(b)
       {

var pic = new WebObject();
       if(b.getAt(0) == 0xFF &&
        b.getAt(1) == 0xD8)
        {
    var offs = 2;
         var oldoffs = offs;
         var marker = 0;
         var abort_loop = false;

while (offs<b.length && !abort_loop)
          {
          marker = b.getAt(offs) * 256;
          marker += b.getAt(offs+1);

if(marker == 0xFFC0 || marker == 0xFFC2)
          {
          pic["height"] = b.getAt(offs+5)*256 + b.getAt(offs+6);
          pic["width"] = b.getAt(offs+7)*256 + b.getAt(offs+8);

abort_loop = true; // we got it. Abort.
          }

else if(((marker&0xFF00) == 0xFF00) && ((marker&0xFF) != 0xFF) && ((marker&0xFF) != 0))
          {
          offs += 2;
          oldoffs = offs;
          offs += b.getAt(oldoffs)*256;    // HI-byte FIRST!
          offs += b.getAt(oldoffs+1);      // LO-byte later.

}
        else
          {
   abort_loop = true;
   }
        }
      }
    return pic;
    }
if (request.bild.Mimetype == "image/gif")
{
bildinfos = getPicSizeGIF(request.bild);
bildinfos["format"] = 1;
}
if(request.bild.Mimetype == "image/jpeg")
{
bildinfos = getPicSizeJPG(request.bild);
bildinfos["format"] = 2;
}
write("Bildbreite:" + bildinfos["width"]);

  1. Bin um jeden Hinweis oder alternative Ideen, wie ich an die Bildbreite komme dankbar.

    Das geht doch einfacher.

    <script type="text/javascript">
    var img;
    function getSize(f)
    {
        img = new Image();
        img.onload = submitForm;
        img.form = f;
        img.src = 'file://' + f.bild.value;
        return false;
    }

    function submitForm()
    {
        alert(this.width + 'x' + this.height);
        this.form.submit();
    }
    </script>

    </head>
    <body>

    <form action="" enctype="multipart/form-data">
    <input name="bild" type="file" size="50" onclick="getSize(this.form);">
    </form>

    Struppi.