Bildergrößen in Zeichen umrechnen

Kolibri814

Mitglied
Hi,
ich versuche gerade Bilder in einer SQL Tabelle zu speichern und möchte überprüfen, ob das geladene Bild zu groß ist.

Das Bild soll an der längeren Seite 800px lang sein dürfen und max 150kb groß sein.

Der Speicherplatz in der Tabelle wird mit LONGBLOB ausgewiesen und ich möchte hiermit

PHP:
echo            "<input type='hidden' name='MAX_FILE_SIZE' value=''/>";
die Größe überprüfen.

Wie kann ich jetzt die gewünschte, maximale Bildgröße in Zeichen umrechnen?

Vilen Dank für eure Hilfe.
 
Das kommt auf das Bildformat an. Bei jpg ist es nicht möglich, da die Kompression sogar grobe Schätzungen unmöglich werden lässt. Letztlich ist es sogar bei bmp-Dateien nicht möglich, da man nicht weiß, in welchem Bitformat gespeichert wurde.

Zum Auslesen richtiger Werte eignen sich (unter php) die gdlib, imagemagick oder die exif-Erweiterung. Dazu ist es aber nötig, dass die Datei erstmal runtergeladen wird. Es gäbe womöglich noch den Umweg über das Darstellen einer lokal per JS eingebundenen Bilddatei und das darauffolgende Auslesen des umliegenden Divs. Hab ich noch nicht probiert, wäre aber n Versuch wert.

mfg chmee
 
Ok, bis zum Ende des ersten Absatzes kann ich dir folgen.
Dann ist JS - Javaskript aber der Rest?
Sorry soweit bin ich noch nicht.
 
Die Datei muss (unter php) erst hochgeladen werden, um diese Infos auszulesen.
GDLib - ImageMagick - EXIF

Javascript: Man lässt (uU) das Bild in die Webseite einbinden und "könnte" dann über das Auslesen eine umfassten Divs die Größe auslesen. Ist aber unter Vorbehalt, ich habs nie ausprobiert. Nur ne Idee.

mfg chmee
 
Zuletzt bearbeitet:
Es gäbe womöglich noch den Umweg über das Darstellen einer lokal per JS eingebundenen Bilddatei und das darauffolgende Auslesen des umliegenden Divs. Hab ich noch nicht probiert, wäre aber n Versuch wert.

Das javascript Image objekt hat direkt width und height parameter die man auslegen kann.

Javascript:
var img = new Image();
img.onload = function() {
  alert(this.width + 'x' + this.height);
}
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';

javascript hat allerdings den nachteil, dass es sich manipulieren läst.

Sinnvoller ist hier serverside z.B. die funktion http://de.php.net/manual/en/function.getimagesize.php einzusetzen
 
chibisuke: Na gut, lassen wir die Div weg :) verlangt aber weiterhin, dass das "lokale" Bild in die Seite eingebunden werden darf.

mfg chmee
 
Jap, und damit hast du gegebenfalls je nach browser probleme mit den sicherheitsrestrictions.

Sprich der javascript ansatz würde so aussehen:
- Bild hochladen und zwischenspeichern - Grössenbeschränkung (filesize) überprüfen
- Bild per javascript einbinden um die grösse zu bekommen
- Grösse übermitteln - wenn korrekt - bild entgültig speichern.

unschöne sache, aber theoretisch möglich.

schöner (untested!):
PHP:
<form enctype="multipart/form-data" action="<?= $_SERVER['PHP_SELF']; ?>" method="POST">
    <input name="userfile" type="file">
    <input type="submit">
</form>
<?php
if(isset($_FILE['userfile'])) {
    if($_FILES['userfile']['size'] > '500000') {
        die('File to big');
    }
    $dimension = getimagesize($_FILES['userfile']['tmp_name']);
    if ($dimension[0] > 800) {
        die('File to wide');
    }
    if ($dimension[1] > 600) {
        die('File to high');
    }
    //Save to database

}
?>
 
naja nee, das wäre ja doppelt gemoppelt. Wenn eine Datei hochgeladen werden darf, dann braucht die Größe auch nicht mehr per JS ausgelesen werden, denn eine der php-Möglichkeiten wird mit Sicherheit funktionieren. Es geht ja um das Auslesen der Bildgröße ohne Hochladen. Ich mach mir mal Gedanken, nicht mehr heut und zeig mal nen Code (oder ich erfahre am eigenen Leib, dass es nicht funktionieren wird :))

mfg chmee
 
So ich hab es jetzt ersteinmal ohne die Größenüberprüfung versucht und es kommt kein Bild in der Tabelle an.

Bisher sieht das Eingabe Skript dann so aus:
PHP:
include("dbconnect.inc.php");
include("authentifizierung.php");
$id=$_SESSION['id'];
echo "<html>";
echo "<head>";
echo "<title>Profilbild</title>";
echo "<link rel='stylesheet' type='text/css' href='designc.css'>";
echo "</head>";
echo "<body>";
echo "<h1></h1>";
echo "<form enctype='multipart/form-data' method='post' action='pbupload.php'>";
echo            "<input type='hidden' name='form_id' value='$id'>";
echo            "<input type='file' name='form_profilbild[]'><br>";
echo            "<input type='radio' name='form_selbstbild' value='selbstbild'>selbstbild";
echo            "<input type='radio' name='form_selbstbild' value='avatar'>avatarbild<br>";
echo            "<input type='submit' value='speichern'>";
echo                 "</form>";
echo "</body>";
echo "</html>";

und die pbupload.php Datei soll zuerst überprüfen, ob schon ein Bild gespeichert ist oder nicht.
Wenn nein, dann INSERT und wenn ja dann UPDATE.
Das sieht dann so aus:
PHP:
include("dbconnect.inc.php");
$id=$_POST['form_id'];
$sql = "select

         id,
         profilbild,
         selbstbild
         from
         profilbild
         where
         id='$id'";

$result = mysql_query($sql) or die(mysql_error());
if  (!($row = mysql_fetch_row($result)))
{



$sql = "INSERT INTO profilbild (

         id,
         profilbild,
         selbstbild
         )
         values(
         '".$_POST['form_id']."',
         '".$_POST['form_profilbild[]']."',
         '".$_POST['form_selbstbild']."'
          )";

mysql_query($sql) or die(mysql_error());

header("Location: http://".$_SERVER['HTTP_HOST']
         ."/profil.php?meldung=Ihr Bild wurde gespeichert.");
    }
else
{
$sql = "update profilbild set

         id = '".$_POST['form_id']."',
         profilbild = '".$_POST['form_profilbild[]']."',
         selbstbild = '".$_POST['form_selbstbild']."'
          where
         id='$id'";

mysql_query($sql) or die(mysql_error());

header("Location: http://".$_SERVER['HTTP_HOST']
         ."/profil.php?meldung=Ihr Bild wurde aktualisiert.");
}


Nur wie gesagt, kommt noch nichtmal ein Bild in der Tabelle an:

id profilbild selbstbild
1 [BLOB - 0Bytes] selbstbild


Ich denke, ich hab ein viel größeres Problem.
 
Zurück