Anzeige

Thumbnailing

Thumbnailing | PSD-Tutorials.de

Erstellt von Nortex, 11.02.2009.

  1. Nortex

    Nortex Guest

    Thumbnailing
    Hallo,
    ich habe die rgallery installiert, funktioniert soweit auch wunderbar. Leider würde ich aber gerne die Thumbails nicht quadratisch anzeigen lassen, sondern in einem bestimmten Seitenverhältnis. Eigentlich sollen die Bilder breiter gezogen werden (von der quadratischen Form zu einer rechteckigen) und falls diese zu hoch sind, werden sie horizontal zugeschnitten. Momentan herrscht das Seitenverhältnis 1:1 (Höhe, Breite), jedoch wünsche ich mir beispielsweiße 1:2.

    Wie muss ich den Code abändern?

    Code (Text):
    1.     public function resizeImage($input, $output, $squared, $compression = 65, $X, $Y = false, $watermark = false) {
    2.  
    3.         list ($width, $height, $imagetype) = getimagesize($input);
    4.         // first check if we need to resize
    5.         // we would not accept images smaller than thumbsize - so no squared sizes have to be checked
    6.         if (!$squared) {
    7.             if ($width <= $X)
    8.                 $X = $width;
    9.             if ($height <= $Y)
    10.                 $Y = $height;
    11.         }
    12.         if (RGALLERY_USE_CONVERT == 1) {
    13.             // user imagemagicks convert tool
    14.             $retval = true;
    15.             if ($squared) {
    16.                 $tmp_large_image_size = 2 * $X;
    17. system("convert " . $input . " -thumbnail x" . $tmp_large_image_size . " -resize '" . $tmp_large_image_size . "x<' -resize 50% -gravity center -crop " . $X . "x" . $X . "+0+0 +repage -quality " . $compression . " " . $output, $retval);
    18.                 return $retval;
    19.             } else {
    20.                 system("convert " . $input . " -thumbnail \"" . $X . "x" . $Y . ">\" -quality " . $compression . " " . $output, $retval);
    21.                 return $retval;
    22.             }
    23.         } else {
    24.             // use gd!
    25.             if ($imagetype == 1)
    26.                 $image = @imagecreatefromgif($input); elseif ($imagetype == 2)
    27.                 $image = @imagecreatefromjpeg($input); elseif ($imagetype == 3)
    28.                 $image = @imagecreatefrompng($input); else
    29.                 return false;
    30.             if (!$image) {
    31.                 return false;
    32.             }
    33.             // check if the image needs to be rotated
    34.             $rotate = RGallerySystem::getRotationStatus($input);
    35.             if ($rotate) {
    36.                 $image = imagerotate($image, $rotate, 0);
    37.                 $width = imagesx($image);
    38.                 $height = imagesy($image);
    39.             }
    40.  
    41.             if ($squared) {
    42.                 if ($width > $height) {
    43.                     $new_width = round($X * ($width / $height));
    44.                     $new_height = $X;
    45.                     $thumb = imagecreatetruecolor($X, $X);
    46.                     imagecopyresampled($thumb, $image, 0, 0, ($width - $height) / 2, 0, $new_width, $new_height, $width, $height);
    47.                 } else if ($width == $height) { // If a square image
    48.                     $thumb = imagecreatetruecolor($X, $X);
    49.                     imagecopyresampled($thumb, $image, 0, 0, 0, 0, $X, $X, $width, $height);
    50.                 } else { // Must be a portrait image
    51.                     $new_width = $X;
    52.                     $new_height = round($X * ($height / $width));
    53.                     $thumb = imagecreatetruecolor($new_width, $new_width);
    54.                     imagecopyresampled($thumb, $image, 0, 0, 0, ($height - $width) / 2, $new_width, $new_height, $width, $height);
    55.                 }
    56.             } else {
    57.                 // calculate the new height and width
    58.                 if ($width > $height) {
    59.                     // landscape
    60.                     $new_width = $X;
    61.                     $new_height = $height * ($X / $width);
    62.                     if ($new_height > $Y) {
    63.                         $new_height = $Y;
    64.                         $new_width = $width * ($Y / $height);
    65.                     }
    66.                 } elseif ($width < $height) {
    67.                     // portrait
    68.                     $new_width = $width * ($Y / $height);
    69.                     $new_height = $Y;
    70.                     if ($new_width > $X) {
    71.                         $new_width = $X;
    72.                         $new_height = $height * ($X / $width);
    73.                     }
    74.                 } else { // ($width == $height)
    75.                     if ($X > $Y) {
    76.                         $new_width = $Y;
    77.                         $new_height = $Y;
    78.                     } elseif ($X < $Y) {
    79.                         $new_width = $X;
    80.                         $new_height = $X;
    81.                     } else {
    82.                         $new_width = $X;
    83.                         $new_height = $Y;
    84.                     }
    85.                 }
    86.                 $thumb = imagecreatetruecolor($new_width, $new_height);
    87.                 imagecopyresampled($thumb, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    88.             }
    Vielen Dank
     
    #1      
  2. CIX88

    CIX88 Aktives Mitglied

    Dabei seit:
    06.04.2006
    Beiträge:
    814
    Geschlecht:
    männlich
    Ort:
    GR
    Thumbnailing
    AW: Thumbnailing

    > Wie muss ich den Code abändern?

    Also fertige Lösung werde ich hier nicht anbieten.
    Es ist hilfreich erst vom Original Bild das Seitenverhältnis zu ermitteln.
    Mit diesen Angaben kannst du dann weiter rechnen.

    Beispiel:
    Thumbnail mit GDlib (einfach)
     
    #2      
  3. Nortex

    Nortex Guest

    Thumbnailing
    AW: Thumbnailing

    Danke für den Link CIX, aber leider hilft dieser mir nicht all so viel weiter. Ich habe in meinem kopierten Code sehr wenig Durchblick und auch sehr wenig Ahnung von der Materie.

    Vielleicht kann mir jemand ja noch genauer helfen.

    Vielen Dank
    Sebastian
     
    #3      
  4. CIX88

    CIX88 Aktives Mitglied

    Dabei seit:
    06.04.2006
    Beiträge:
    814
    Geschlecht:
    männlich
    Ort:
    GR
    Thumbnailing
    AW: Thumbnailing

    Hmmm, Positionen, Breiten, Höhen, Verhältnisse bzw. Dreisatz (früher Verhältnisgleichung) ist Mathematik und wird schon in der Schule gelernt :)

    Wenn du eine definierte Breite und Höhe hast, dann muss das Bild proportional verkleinert werden. Sprich das Verhältnis von Breite / Höhe bleibt immer gleich, egal wie groß das Bild ist.

    Beispiel:

    - definierte_breite 400px und definierte_höhe 300px
    - dein org_bild_breite 800px und org_bild_höhe 600px

    verhältnis = org_bild_breite / org_bild_höhe;

    ist
    ( org_bild_breite > definierte_breite )
    dann
    neue_bild_breite = definierte_breite;
    neue_bild_höhe = neue_bild_breite / verhältnis;

    oder ist
    ( org_bild_höhe > definierte_höhe )
    dann
    neue_bild_höhe = definierte_höhe;
    neue_bild_breite = neue_bild_höhe * verhältnis;

    sonst
    neue_bild_breite = definierte_breite;
    neue_bild_höhe = definierte_höhe;

    Damit man nun noch das Bild mittig und zentriert positionieren kann:

    x = ( definierte_breite / 2) - ( neue_bild_breite / 2 );
    y = ( definierte_höhe / 2) - ( neue_bild_höhe / 2 );

    Und wenn alles funktioniert, müsste es in etwa so aussehen:
    Screenshots » Bildschirmcopy, Seite 1

    Die Bilder haben teilweise völlige unterschiedliche Ausgangsgrößen.
    Das Thumbnail ist auf 160px x 120 px gesetzt.

    Weis nicht wie ich das jetzt noch einfacher erklären könnte?

    Sicher könnte ich deinen Code umschreiben, aber wenn das Prinzip nicht standen wird, dann hilft das sicher auch nicht weiter :)
     
    Zuletzt bearbeitet: 11.02.2009
    #4      
  5. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    Thumbnailing
    AW: Thumbnailing

    Was ist mit "genauer Helfen" gemeint? Die Lösung?
     
    #5      
  6. Nortex

    Nortex Guest

    Thumbnailing
    AW: Thumbnailing

    Die Lösung muss es nicht unbedingt sein, würde mich jedoch sehr darüber freuen. Ich verstehe in dem Code einfach nicht, in welchem Stück ich genau arbeiten muss.

    Vielen Dank
    Sebastian
     
    #6      
  7. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    Thumbnailing
    AW: Thumbnailing

    Das dachte ich mir. Du wirst (ausser jemand nimmt sich die Zeit) kaum die Lösung erhalten. Aber wenn du etwas im Netz suchst wirst du auch fündig oder du beschäftigst dich selbst mit dem Thema Thumbnail php auf PHP: Hypertext Preprocessor

    Am besten ist es hierzu sich genau zu skizzieren, was man tun möchte um an das Ergebnis zu gelangen, wenn man sich noch nicht mit dem Thema php befasst hat. Allerdings gibt es auch eine Menge an Tutorials zum Thema selbst.

    Sorry, dass auch ich nicht die Lösung liefere.
     
    #7      
x
×
×