Avatar billede krel Nybegynder
19. marts 2007 - 13:35 Der er 17 kommentarer

Resize billede

Hej.
Jeg har et billedgalleri der fungere helt fint, men jeg ville gerne have lidt kontrol over billederne så de ikke dukker op i org. opløsning (1600 x 1200 er lige stort nok!)

Men vil ikke bare stille høje og brede til fx 400 x 300 så bliver billederne jo gnidret at se på...

Desuden er nogle af billederne også i liggende format så hvis man kan skrive en eller anden kode så hvis høje er større end bredde skal høje max være 400 og bredde max 300,
mens hvis bredde er større end højeden skal bredde max være 400 og høje max 400

Kan det overhovedet lade sig gi sig?
- kender intet til php, scriptet er et jeg har fundet herinde ved at søge gennem en masse spm.

|Krel
Avatar billede jakobdo Ekspert
19. marts 2007 - 17:59 #1
Det skulle nok være muligt at lave ja! :o)
Avatar billede jakobdo Ekspert
19. marts 2007 - 18:00 #2
<?php
function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}
?>
Avatar billede johan.o Nybegynder
19. marts 2007 - 18:01 #3
Ja, det tror jeg godt det kan, men det er nok nødvendigt med lidt mere information om hvordan det mere nøjagtigt ønskes at det skal fungerer.

Hvis du nu starter med at forklare hvordan dit billed galleri fungerer idag.

Mvh. Johan
Avatar billede krel Nybegynder
19. marts 2007 - 22:20 #4
hmm jeg har en index.php med en masse kode (håber ikke den er nødvendig at poste her) et sted i denne kode genereres så noget i retning af:

et link: til show.php?..en masse kriterier..

denne show.php inderholder kun denne ene linie

<a title="klik for at komme tilbage til galleriet" href="java script:history.back();"><img src="<?php echo $_GET['show']; ?>" border="0"></a></td>

hvor jeg så ville håbe at det kun er nødvendigt at tilføje et stykke kode (evt den fra jakobdo - prøver lige)
Avatar billede krel Nybegynder
19. marts 2007 - 22:23 #5
* øhm >> jakobdo
Da jeg har søgt på dette emne herinde syns jeg, jeg er nået frem til noget der minder om dit.

Kan det passe at din kode går ind og gemmer billerne i mappen med den størrelse som man nu angiver eller er det kun på den side at billederne vises i den angivne størrelse så et org billed på fx 1600x1200 forbliver denne opæøsning og ikke 400x300 hvis dette nu skulle være max

?
Avatar billede jakobdo Ekspert
19. marts 2007 - 22:31 #6
Funktionen kan bruges til at resize et billede!
Hvis vi siger du har billedet:
1600x1200.jpg og smider det i funktionen:
resize('1600x1200.jpg','400x300.jpg',400,400);
Så vil den kopiere et lille billede, som vil være max 400 i højde eller bredde.
Avatar billede krel Nybegynder
19. marts 2007 - 22:44 #7
oket men er det så ikke kun billeder i jpg format? bare nysgerig..
Denne 'kopiering' bliver så kun vist på den pågældende side og ikke gemt fysisk noget sted?
Avatar billede krel Nybegynder
19. marts 2007 - 22:55 #8
* yes, nu er det sådan at der lægger mange billeder i hver mappe og disse bliver hentet via URL'en så når man klikker på et billeder åbnes:

show.php?id=$tal&show=$mappe/$billeder[$i]\

på show.php er kilden til det enkelt billede så givet ved:

();"><img src="<?php echo $_GET['show']; ?>" border="0">

har prøve at rode lidt så dette $_GET['show'] bliver indsat som det billede der skal resizes og hvis man så kunne lave noget ala $_GET['show']_small så det nye billede kom til at hedde det samme blot med dette "_small" bagefter?

??
Avatar billede jakobdo Ekspert
20. marts 2007 - 07:58 #9
Altså man kunne godt godt få ind og rette i koden show.php og få den til at resize billedet on-the-fly.
Man kunne jo også lave det på denne måde:

Tjek om der findes et lille billede af det billede som brugeren forespørger på:

Findes lille version?

Hvis ja, vis det.
Hvis nej, opret det lille billede og gem det til næste gang en vil se det og vis det.
Avatar billede krel Nybegynder
20. marts 2007 - 21:22 #10
Okey
Nu syns jeg det i forvejen tar en del tid at hente billederne så det ville jo nok ikk være nogen dårlig ide at gemme dem mindre..

Denne tjekke funktion, var det noget du ville strikke ind i min nuværende php-kode (ekstra point gives self. hvis 100 ikk er 'arb' værd!)
Avatar billede jakobdo Ekspert
20. marts 2007 - 21:34 #11
Du kan da prøve at smide show.php koden herind!
Måske jeg kan tilføje noget kode dertil, som kan det jeg beskrev i tidligere indlæg.
Hvilke billede typer har du i dit gallery?
Avatar billede krel Nybegynder
20. marts 2007 - 21:42 #12
De er alle jpg...

** Show.php *********************
<?php
#Indstillinger
$tal = $_GET[id];
echo "<head>";
echo "<link rel='stylesheet' type='text/css' href='../../style/Cal.css'>";
echo "<title>KongeLogen :: Billeder $tal. Logeaften</title>";
echo "</head>";
echo "<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: collapse' width='98%' id='table2'>";
echo "<tr>";
echo "<td class='book'><p style='margin-left: 1pt'><b>BILLEDERNE fra $tal. Kongeloge Aften</b></p></td>";
echo "</tr>";
echo "<tr>";
echo "<td height='3'></td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
?>
<a title="klik for at komme tilbage til galleriet" href="java script:history.back();"><img src="<?php echo $_GET['show']; ?>" border="0"></a></td>
<?php
echo "</td>";
echo "</tr>";
echo "</table>";
?>

Men jeg tror altså også du er nød til at se på index.php det er i denne alt koden ligger vil jeg sige..

** index.php *********************
<?php
#Indstillinger
$tal = $_GET[id];
$sum = 9; // Antal billeder ved siden af hinanden
$sumcount = 1;
$imgwidth = 46; // Billedets bredde
$imgheight = 61.33; // Bileddets højde
$mappe = "$tal"; // Mappen med billeder
$pr_side = 45; // Antal billeder pr. side

echo "<head>";
echo "<link rel='stylesheet' type='text/css' href='../../style/Cal.css'>";
echo "<title>KongeLogen :: Billeder $tal. Logeaften</title>";
echo "</head>";

if (isset($_GET['offset'])) {
$offset = $_GET['offset'];
} else {
$offset = 0;
}
$pics = $offset+$pr_side;
$i = $offset;

echo "<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: collapse' width='98%' id='table2'>";
echo "<tr>";
echo "<td class='book'><p style='margin-left: 1pt'><b>BILLEDERNE fra $tal. Kongeloge Aften</b></p></td>";
echo "</tr>";
echo "<tr>";
echo "<td>";

# Laver et array med billederne, så vi senere kan sortere dem alfabetisk
$handle = opendir($mappe);
while (($fil = readdir($handle)) !== false) {
if ($fil != "." && $fil != ".." && !is_dir($mappe."/".$fil)) {
$billeder[] = "$fil";
}
}
closedir($handle);
# Udskriver billederne
sort($billeder);
echo "<table><tr>";
while($i < $pics && $billeder[$i] != "") {
echo "<td><a titel=\"klik for stort billede\" href=\"show.php?id=$tal&show=$mappe/$billeder[$i]\"><img src=\"$mappe/$billeder[$i]\" border=\"0\" width=\"$imgwidth\" height=\"$imgheight\"></a></td>";
if ($sumcount == $sum) {
$sumcount = 0;
echo "</tr><tr>";
}
$sumcount++;
$i++;
}
?>
</tr>
</table>
<br>
<?php
#Udskriver frem og tilbage links
if ($offset >= $pr_side) {
$forrige = $offset-$pr_side;
echo "<a aligen='center' class=\"bil\" href=\"?id=$tal&offset=$forrige\"> $pr_side FORRIGE BILLEDER</a> | ";
}
if (count($billeder) > $offset+$pr_side) {
$naeste = $offset+$pr_side;
echo "<a aligen='center' class=\"bil\" href=\"?id=$tal&offset=$naeste\"> N&AElig;STE $pr_side BILLEDER</a>";
}
echo "</td>";
echo "</tr>";
echo "</table>";
?>
Avatar billede jakobdo Ekspert
04. april 2007 - 08:38 #13
Du kan evt teste dette script:

<?php
//http://www.eksperten.dk/spm/768854
set_time_limit(0);

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

$dir = getcwd() . '/'; //Husk mappen som denne fil ligger i, skal chmod'es til 777

$allowExt = array('jpg','JPG','jpeg','JPEG');

$images = glob($dir . '{*.'.implode(',*.',$allowExt).'}', GLOB_BRACE);

foreach($images AS $image)
{
    $basename = basename($image);
    if(!file_exists("thumb_large_" . $basename) && !file_exists("thumb_small_" . $basename) && !preg_match('/^thumb_/', $basename))
    {
        //Stort Thumb
        resize($basename, getcwd() . "/thumb_large_" . $basename, 800, 800);
       
        //Lille Thumb
        resize($basename, getcwd() . "/thumb_small_" . $basename, 100, 100);
       
        echo 'Image : ' . $basename . ' resized<br />';
    }
}

?>


Det laver 2 thumbs! et stort og et lille.
Avatar billede krel Nybegynder
04. april 2007 - 09:12 #14
okey og så kommer det næste problem. hvordan chmod'er jeg en mappe til '777' i frontpage? evt. fra mit websted på nettet?
Avatar billede jakobdo Ekspert
04. april 2007 - 09:22 #15
Det skal du gøre via FTP.
Avatar billede krel Nybegynder
04. april 2007 - 10:24 #16
hmm okey.. aå skal jeg først finde et ftp program eller kan total comander bruges til det? mener nok jeg bruge det til at uploade sider via ftp engang...
Avatar billede jakobdo Ekspert
04. april 2007 - 11:09 #17
Total Commander kan du bruge til at chmod'e med.
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