Flashhilfe.de - Flash Community

Seitenverhltnis bei Bildupload beibehalten ??

 


AntwortenRegistrieren Seite1  

Atticus#1
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

02.02.2009, 22:03

Hallo^^

Ich habe ein Script geschrieben für einen Bilderupload in PHP.

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$image = "$zielverzeichnis/$newname";
      $target = "$thumbverzeichnis/$newname";

        $max_width = "196";
        $max_height = "148";

      $quality = "100";

        if(substr($ext, 1) == "jpg" || substr($ext, 1) == "jpeg") {
           $src_img = imagecreatefromjpeg($image);
        }

        if(substr($ext, 1) == "gif") {
              $src_img = imagecreatefromgif($image);
        }

        if(substr($ext, 1) == "png") {
            $src_img = imagecreatefrompng($image);
        }

      $picsize = getimagesize($image);

        $src_width = $picsize[0];
      $src_height = $picsize[1];

        if($src_width > $max_width) {
          $dest_width = $max_width;
          $dest_height = $max_height;
      }

      else {
          $dest_width = $src_width;
          $dest_height = $src_height;
      }

        $dst_img = imagecreatetruecolor($dest_width, $dest_height);

      imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);

        if(substr($ext, 1) == "jpg" || substr($ext, 1) == "jpeg") {
           imagejpeg($dst_img, "$target", $quality);
        }

        if(substr($ext, 1) == "gif") {
           imagegif($dst_img, "$target", $quality);
        }

        if(substr($ext, 1) == "png") {
         imagepng($dst_img, "$target");
        }


Das Script funktioniert wunderbar!!! Bei diesem Script wird aber noch ein Thumbnail erstellt mit folgender Größe:

PHP:
1
2
3
4
5
<?
$max_width 
"196";
$max_height "148";
?>


Allerdings werden jetzt alle Bilder in diesem Format abgespeichert, das Seitenverhältnis stimmt dann bei den meisten Bildern nicht mehr. Und dies ist auch genau meine Frage, wie bekomme ich es hin das das Script auf das Seitenverhältnis achtet ???

Vielen Dank schonmal für eure Mühe!!!

Gruß Atticus^^
Atticus#2
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

Themenautor/in

02.02.2009, 22:41

So^^

Also ich habe es jetzt schon hinbekommen das das Seitenverhältnis beibehalten wird:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
$picsize 
getimagesize($image);

       
$src_width $picsize[0];
       
$src_height $picsize[1];

        if((
$src_height $max_height)) {
             
$src_height $max_height;

             
$percent = ($picsize[1] / $src_height);
             
$src_width = ($picsize[0] / $percent);
          }

          if((
$src_width $max_width)) {
             
$src_width $max_width;

             
$percent = ($picsize[0] / $src_width);
             
$src_height = ($picsize[1] / $percent);
          }

       
$dest_width round($src_width);
       
$dest_height round($src_height);

       
$dst_img imagecreatetruecolor($dest_width$dest_height);

       
imagecopyresampled($dst_img$src_img0000$dest_width$dest_height$src_width$src_height);

        if(
substr($ext1) == "jpg" || substr($ext1) == "jpeg") {
           
imagejpeg($dst_img"$target"$quality);
        }

        if(
substr($ext1) == "gif") {
           
imagegif($dst_img"$target"$quality);
        }

        if(
substr($ext1) == "png") {
           
imagepng($dst_img"$target");
        }
?>


Aber komischerweise wird jetzt nicht das ganze Bild kleiner skaliert, sondern die linke obere Ecke einfach nur genommen in der Größe wie es maximal sein darf ???

Es wäre super wenn mir jemand sagen könnte wie das kommt und wie ich es schaffe das das ganze Bild kleiner skaliert wird!!!

Vielen Dank !!!

Gruß Atticus^^
fevzi#3
Benutzerbild von fevzi
Beiträge: 155
Wohnort: Saarbrücken
Registriert: Feb 2006

03.02.2009, 09:06

meinst du sowas ?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?
$ordner 
$_GET['ordner'];
$bild $_GET['bild'];
$max $_GET['max'];

$fotopfad "Fotos/$ordner";

// The file
$filename "$fotopfad/$bild".".jpg";

if (
file_exists($filename)){


// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width$height) = getimagesize($filename);

//if($width > $max || $height > $max){

if($width $height){
$p = ($max 100) / $width;
$factor $p 100;
$new_width $width $factor;
$new_height $height $factor;
}

elseif(
$height $width || $height == $width){
$p = ($max 100) / $height;
$factor $p 100;
$new_width $width $factor;
$new_height $height $factor;
  }

// Resample
$image_p imagecreatetruecolor($new_width$new_height);
$image imagecreatefromjpeg($filename);
imagecopyresampled($image_p$image0000$new_width$new_height$width$height);

// Interlacing
imageinterlace($image_p,1);

// Output
imagejpeg($image_pnull100);
//oder du schreibst hier eben statt null einen Dateinamen hin.
 
}
?>


gruss
function foo();
Geändert von fevzi am 03.02.09 um 09:08 Uhr
Atticus#4
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

Themenautor/in

03.02.2009, 13:08

Hallo^^

Ja ich schreibe da einen Dateinamen hin ;) Ist das so richtig ??? Jedenfalls wird bei mir immer die linke obere Ecke des Bildes einfach nur genommen anstatt das das ganze Bild kleiner skaliert wird und ich weis nicht wie das kommt!

EDIT:
Kleiner bekomme ich es aber schon, das Seitenverhältnis wird schon angepasst ;)

Hast du eine Idee ???

Gruß Atticus^^
Geändert von Atticus am 03.02.09 um 13:18 Uhr
fevzi#5
Benutzerbild von fevzi
Beiträge: 155
Wohnort: Saarbrücken
Registriert: Feb 2006

03.02.2009, 15:47

auf php.net steht
# imagecopy — Kopiert einen Bildausschnitt
# imagecopymerge — Copy and merge part of an image
# imagecopyresampled — Copy and resize part of an image with resampling
# imagecopyresized — Kopieren und Ändern der Größe eines Bild-Teiles
function foo();
Atticus#6
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

Themenautor/in

03.02.2009, 16:02

Hi^^

vielen Dank erstmal für deine Mühe!!! Ich habe jetzt alle ausprobiert, aber leider funktioniert das immer noch nicht so wie ich das gerne hätte. Es wird immer nur der linke obere Rand des hochzuladenen Bildes als Ausschnitt gespeichert.

Es muß doch möglich sein das ganze Bild zu skalieren und nicht nur die den ausschnitt einer Ecke, es wäre super wenn jamand wüsste wie das geht!!!

Vielen Dank nochmal und im Vorraus für die Mühe!!!

Gruß Atticus^^
fevzi#7
Benutzerbild von fevzi
Beiträge: 155
Wohnort: Saarbrücken
Registriert: Feb 2006

04.02.2009, 09:22

das hat mich ja gewundert, die ganzen befehle sind auf bildausschnitte gerichtet.
in meiner gallerie skaliere ich einfach. ist wohl nicht dein feine art °°
PHP:
1
2
3
4
5
<?
//z.b beispiel
echo "<img src='".$name.".jpg' width='30%' heigth='30%'>
?>
function foo();
badskill#8
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

04.02.2009, 10:20

Eine Skalierung bedeutet, dass das komplette Bild mit voller Auflösung geladen werden muss.
Das geht extrem auf den Traffic und für den Benutzer ist das auch nicht sonderlich schön wenn er sich mehrere MByte runterladen muss nur um ein paar Vorschaubilder zu sehen.

Was jetzt das eigentliche Problem angeht, kann ich auch nicht wirklich weiterhelfen. Vielleicht stimmt etwas nicht mit den Werten $width, $height.
fevzi#9
Benutzerbild von fevzi
Beiträge: 155
Wohnort: Saarbrücken
Registriert: Feb 2006

04.02.2009, 11:49

das script hier funktioniert einwandfrei. grosses bild im ordner img. kleines bild kommt nach dem funktionsaufruf in den ordner thumbs, der zuerst leer ist.. es ist resampled. prozentangaben kann man varieren.

gruss
function foo();

Angehängte Dateien:
Komprimierte Datei resize.zip30.28 KB
Atticus#10
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

Themenautor/in

04.02.2009, 13:40

Hallo^^

Erstmal vielen Dank euch beiden!!! Mein Problem ist das ich sicherstellen muß das die Bilder nicht großer sein dürfen nach dem Upload als einer bestimmten größe. Das Script schonmal super aus, allerdings muß ich das so umbauen das es nicht nach Prozentangaben verkleinert sondern so dasdas Bild eine bestimmte größe nicht überschreitet, ich hoffe das klappt ;)

Ich melde mich nochmal wenn ich es ausprobiert habe, vielen Dank nochmal na euch beide!!!

Gruß Atticus^^
Atticus#11
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

Themenautor/in

05.02.2009, 17:14

Hallo^^

Also ich habe es jetzt so:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$max_width = "196";
        $max_height = "148";

      $quality = "100";

      $picsize = getimagesize($image);

        $src_width = $picsize[0];
      $src_height = $picsize[1];

        if(($src_height > $max_height)) {
          $src_height = $max_height;

          $percent = ($picsize[1] / $src_height);
          $src_width = ($picsize[0] / $percent);
        }

        if(($src_width > $max_width)) {
          $src_width = $max_width;

          $percent = ($picsize[0] / $src_width);
          $src_height = ($picsize[1] / $percent);
        }

        $dest_width = round($src_width);
        $dest_height = round($src_height);

        $dst_img = imagecreatetruecolor($dest_width, $dest_height);

        if(substr($ext, 1) == "jpg" || substr($ext, 1) == "jpeg") {
           $src_img = imagecreatefromjpeg($image);
        }

        if(substr($ext, 1) == "gif") {
           $src_img = imagecreatefromgif($image);
        }

        if(substr($ext, 1) == "png") {
         $src_img = imagecreatefrompng($image);
        }

        imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);

        if(substr($ext, 1) == "jpg" || substr($ext, 1) == "jpeg") {
           imagejpeg($dst_img, "$target", $quality);
        }

        if(substr($ext, 1) == "gif") {
           imagegif($dst_img, "$target", $quality);
        }

        if(substr($ext, 1) == "png") {
         imagepng($dst_img, "$target");
        }


Das Script funktioniert super, die Bilder werden vom Seitenverhältnis her angepasst. Aber Es wird immernoch nur der Linke obere Bildausschnitt genommen anstatt das das ganze Bild nue skaliert wird. Es wäre wirklich super wenn mir jemand sagen könnte wie dies so ist!!!

Vielen Dank !!!

Gruß Atticus^^
badskill#12
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

05.02.2009, 17:28

Da ist eine Sache, die mir auffällt.
Nehmen wir mal $src_width. Die Variable wird ja gefüllt durch getimagesize($image);. Das heisst, in der Variable ist die Ursprungsbreite vom Bild drin. Soweit so gut. Doch auf einmal steht dann das da:
PHP:
1
2
3
4
5
6
<?
if(($src_width $max_width)) {
   
$src_width $max_width;
}
?>

Hier wird auf einmal der Variable ein anderer Wert zugewiesen.
Weiter unten steht dann das:
PHP:
1
2
3
4
<?
$dest_width 
round($src_width);
?>

Somit haben beide Variablen den gleichen Wert. Macht wenig Sinn.
Darum ist dann auch klar, warum hier:
PHP:
1
2
3
4
<?
imagecopyresampled
($dst_img$src_img0000$dest_width$dest_height$src_width$src_height);
?>

nur ein Ausschnitt und nicht das gesamte Bild genommen wird.

Überdenke dein Skript nochmal.
Atticus#13
Benutzerbild von Atticus
Beiträge: 1411
Wohnort: Leverkusen
Registriert: Jul 2006

Themenautor/in

05.02.2009, 17:55

Hi badskill^^

Super, vielen Dank du hast den Fehler gefunden ;)

Das Problem lag in dieser Zeile:

PHP:
1
2
3
4
<?
imagecopyresampled
($dst_img$src_img0000$dest_width$dest_height$picsize[0], $picsize[1]);             
?>


Vielen Dank nochmal, du hast mir wirklich sehr geholfen und ich kann mich endlich um die nächsten Probleme kümmern ;)

Gruß Atticus^^
Geändert von Atticus am 05.02.09 um 17:57 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de