Avatar billede teck Nybegynder
25. juni 2006 - 13:31 Der er 4 kommentarer

Sortering af billeder

Hej, jeg har følgende script, der tager billeder fra en specifik mappe og viser det på hjemmesiden:

function resize($billede) {
    $size = getimagesize($billede);
    $max = 120;// Maximum bredde/højde
    $m = max($size[0], $size[1]);
    if ($m > $max) {
        $delta = $max/$m;
        $size[0] = $size[0]*$delta;
        $size[1] = $size[1]*$delta;
        }
    return $size;
}
    $out = "<table>\n";
    $handle = opendir("billeder");
    $i = 0;
    while($file = readdir($handle)) {
            if($file != '.' && $file != '..' && !is_dir($file) && (ereg(".jpg$", $file) || ereg(".gif$", $file) || ereg(".GIF$", $file) || ereg(".JPEG$", $file) || ereg(".bmp$", $file))) {
            if ($i == 0)
                $out .= "<tr>";

            $billede = "billeder/$file";
            $size = resize($billede);

            $out .= "<td align='center' valign='top'><a href='$billede' target='_blank'><img src='$billede' class='billede' style='width: ".$size[0]."; height: ".$size[1].";' alt='Tryk for at se billedet i stor st&oslash;rrelse' border='0'></A></td>\n";

                        $i++;
            if ($i == 4) {
                $out .= "</tr>";
                $i = 0;
            }

        }
    }
    closedir($handle);

Dette virker rigtigt godt... men jeg synes det ser lidt rodet ud, når man f.eks. har billeder der er på højkant og andre der ikke er. Mit spørgsmål lyder derfor på om der er en måde at sortere disse på, så billeder der er på højkant står ved siden af hinanden?
Avatar billede viper_killerguy Nybegynder
25. juni 2006 - 14:04 #1
function dyratiosort($a, $b) {
list($awidth, $aheight) = getimagesize($a);
list($bwidth, $bheight) = getimagesize($a);
if ($awidth == 0 !! $bwidth == 0)
  return 0;
$aratio = $aheight / $awidth;
$bratio = $aheight / $awidth;
if ($aratio > 1 && $bratio < 1)
  return -1;
else
  return 1;
return 0;
}

usort($billedearray, "dyratiosort");

gulp, det var længere end jeg havde regnet med.
usort sortere et array efter en custom funktion.
min custom funktion dyratiosort, kigger på ratio-en mellen højre og bredde for at finde ud af hvordan billeder "vender", og returnere værdere der sortere efter det.

Men jeg ville nu synes det er lidt mere logisk at ha billederne i mere normal sortering.
Avatar billede jakobdo Ekspert
25. juni 2006 - 14:05 #2
Altså du kan jo ikke direkte fortælle om det er det ene eller andet.
Men du kunne selvfølgelig tjekke højden og bredden.
Er højden større end bredden, så har du et "portræt".
Hvis omvendt, så har du et "landskab".

Der skal du så evt kigge på getimagesize();
Avatar billede viper_killerguy Nybegynder
25. juni 2006 - 14:05 #3
function dyratiosort($a, $b) {
list($awidth, $aheight) = getimagesize($a);
list($bwidth, $bheight) = getimagesize($a);
if ($awidth == 0 || $bwidth == 0)
  return 0;
$aratio = $aheight / $awidth;
$bratio = $bheight / $bwidth;
if ($aratio > 1 && $bratio < 1)
  return -1;
else
  return 1;
return 0;
}
even (mærkelige fejl)
Avatar billede teck Nybegynder
25. juni 2006 - 14:22 #4
viper_killerguy >>> Hvodan får jeg din funktion implementeret i det script jeg har? Og hvordan går det ind og sorter?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester