Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 18:59 Der er 15 kommentarer og
1 løsning

Resize af billeder - vil kune tage nogle billeder

Jeg kan ikke resize alle billeder. Jeg har prøvet med mange forskellige billeder, store, små, simple, detaljerede, jpg og gif. Uden jeg har kunnet finde noget specielt mønster i hvad den vil godetage, og omvendt.

Den har godtaget denne: http://www.crx-web.dk/2.jpg
men ikke dette: http://www.crx-web.dk/1.jpg

Nogen der kan se om jeg har en fejl et sted i min kode? eller der mangler noget for at gøre det komplet?


Kode
====================================

function resizeimage($filnavn, $maxhojde, $maxbredde, $nyfil) {


  $size = getimagesize("$filnavn");
  $width = $size[0];
  $height = $size[1];
  if($height > $maxhojde || $width > $maxbredde) {
    $resizefactor = max($height/$maxhojde, $width/$maxbredde);
    $newheight = $height / $resizefactor;
    $newwidth = $width / $resizefactor;
  }

  $image = imagecreatetruecolor($newwidth, $newheight);
  $white = ImageColorAllocate($image,255,0,255);
  ImageFilledRectangle($image,0,0,$newwidth,$newheight,$white);
 
  $src = imagecreatefromjpeg("$filnavn");
 
  imagecopyresampled($image, $src, 0,0,0,0, $newwidth, $newheight, $width, $height);
  ImageJPEG($image, "$nyfil");
  ImageDestroy($image);
}

====================================
Avatar billede nemlig Professor
11. november 2008 - 19:10 #1
Linket til 1.jpg virker ikke.
Størrelsen af filerne kan være problemet eller hvis du anvender "ulovlige" tegn i filnavnene. Kan det være et mønster?
Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 19:29 #2
min fejl - http://www.crx-web.dk/1.gif

Har prøvet at uploade dem som numre, så det burde heller ikke have noget med navngivningen at gøre
Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 19:31 #3
mht. størrelsen har jeg prøvet med et lille billede på kun 100x100 pixels, det ville den heller ikke.
Avatar billede nemlig Professor
11. november 2008 - 19:37 #4
Jeg kan ikke gennemskue koden.
Jeg har selv noget kode, som resizer, som ikke giver problemer.
Kan det være fil-typen, som er problemet.
Måske kan din kode kun håndtere JPG og ikke GIF.
Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 19:46 #5
Den kan godt tage gif, men oftest er det gif-filer. Der er problemer med.

Jeg skrev koden med hjælp fra en guide, så den er nok ikke helt perfekt.

Må jeg få lov at kigge lidt i din kode, og se hvordan den er skruet sammen?
Avatar billede nemlig Professor
11. november 2008 - 19:59 #6
Det må du gerne.
Jeg anvender min kode til gallerier, hvor jeg via FTP uploader JPG og GIF filer.
Så gør koden det, at den automatisk laver thumbnails af alle billeder og viser et galleri. Via få parametre kan jeg styre størrelsen af thumbnails, farver m.m.

Tjek evt. lige her:
http://fdf.dk/esbjerg1/fotoarkiv/arkiv/grenelejren2008/fotothumb.php

Og giv lige en melding, om koden fortsat har interesse.
Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 20:07 #7
Koden har i den grad interesse, bruger den selv i samme sammenhæng.
Avatar billede nemlig Professor
11. november 2008 - 20:20 #8
Koden består af 2 filer:
1 = head.php, som skal ligge i samme mappe, som mappen med dine grafik-filer.
I denne fil, kan du rette forskellige opsætninger.

2 = fotothumb.php, som også skal ligge i samme mappe, som mappen med dine foto-filer.
Det er denne fil, som du skal "kalde", når du vil vise thumbnails og navigere mellem dem. Endvidere er det denne fil, som genererer thumbnails, når du første gange indlæser den. Den holder også øje med, om der kommer nyt grafik i mappen.

VIGTIGT: Du skal via FTP oprette en undermappe, som du kalder "thumbs". (Du kan også kalde den noget andet, men det skal passe med navnet, som fremgår af "head.php").
Denne undermappe skal ændre skrivebeskyttelsen på - ellers vil det ikke virke.
Avatar billede nemlig Professor
11. november 2008 - 20:21 #9
Indholdet af fil "head.php"

<?php
### ---  HERFRA SKAL RETTES HVER GANG --- ###
// VIS TITLEN PA SIDEN
$pagetitle='Grenelejren 2008';
//Sti og fil til fotooversigten (bruges på oversigtens tilbage-knap)
//Sti og fil kan også være '../../landslejr2006.html'
$sti='../../../fotoarkiv.php';
### ---  HERTIL SKAL RETTES HVER GANG --- ###

//Sti til grafikfil på thumbnailoversigten
$grafiksti='../';

// Thumbnails max størrelse
$maxwidth = 225;
$maxheight = 150;

// Thumbnail-mappens navn
$thumbnail_mappe = "thumbs";

// NUMRE AF <TD> PR. <TR> ( PA DANSK/ENGELSK: COLUMNS PA SIDEN :-) )
$td='4';

// BAGGRUNDSFARVE
$bg='#404d57';

// SKAL NAVNES VISES PÅ BILLEDET
$name='1'; // 1 = yes, 0 = no

//Navnet på denne fil
$filnavn = 'fotothumb.php';
?>
Avatar billede nemlig Professor
11. november 2008 - 20:22 #10
Indholdet af "fotothumb.php"

<html>
<head>

<style type="text/css">
a {text-decoration:none}
a:link    { color: #ffffff; text-decoration: none; }
a:visited { color: #ffffff; text-decoration: none; }
a:active  { color: #ffffff; text-decoration: none; }
a:hover  { color: #ffffff; text-decoration: none; }

.form {
    background-color: #cfcfcf;
    border-color: #000000;
    color: #000000;
    border-bottom: 1px solid;
    border-top: 1px solid;
    border-left: 1px solid;
    border-right: 1px solid;
    font-family: Verdana;
    font-size: 10px;
    cursor: hand;
    cursor: pointer;
}
</style>

</head>

<?
//Denne fil skal lægges i samme mappe som billed-filerne. Når filen indlæses genererer den automatisk thumbnails af alle billedfiler.
//På FDF-serveren må billedfilerne ikke være større end
//Navnet på billed-filen må ikke indeholde mellemrum og skal overholde almindlige regler for filnavne på hjemmesideservere
//Husk at ændre skriverettighederne på den mappe filen her ligger i
// VARIABLERNE DEFINERES I FILEN "HEAD.PHP"
require 'head.php';


### --- PAS PA MED AT RETTET NOGET HERUNDER --- ###
if(!is_dir($thumbnail_mappe)) {mkdir("$thumbnail_mappe", 0777);}

function imageresizejpeg($sourcefile,$maxwidth,$maxheight,$destinationfile) { // funktion til resize eaf jpg-filer

    global $newwidth,$newheight;

  if($img_src=@imagecreatefromjpeg($sourcefile)) {
        copy($sourcefile, $destinationfile);
        $info=@getimagesize($sourcefile);

        if($info[1]>$maxheight || $info[0]>$maxwidth)
        {
        $ratio_height=$maxheight/$info[1];
        $ratio_width=$maxwidth/$info[0];
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=intval($info[0]*$ratio);
        $newheight=intval($info[1]*$ratio);
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $info[0], $info[1]);
        @imagejpeg($img_dst, $destinationfile);
        imagedestroy($img_dst);
        }
        else
        {
        $newwidth=$info[0];
        $newheight=$info[1];
        }
    @imagedestroy($img_src);
    return true;
    }
    else
    {
    return false;
    }
}

function get_size($info,$maxwidth,$maxheight) { // funktion til beregning af størrelse af ikke-jpg-filer
    global $newwidth,$newheight;

    if($info[1]>$maxheight || $info[0]>$maxwidth) {
        $ratio_height=$maxheight/$info[1];
        $ratio_width=$maxwidth/$info[0];
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=intval($info[0]*$ratio);
        $newheight=intval($info[1]*$ratio);
    return true;
    }
    else
    {
      $newwidth=$info[0];
      $newheight=$info[1];
    }
}

### --- PAS PA MED AT RETTET NOGET HERUNDER --- ###
$handle=opendir('.');
// GO
$piccy=array();
$count=0;
// SCAN THE DIR
//while (($filename = readdir($handle))!==false) {
while ($filename = readdir($handle)) {
  // TYPER FILER DER KAN HENTES
  if (eregi("(\.jpg|\.gif|\.bmp|\.png|\.JPG|\.GIF|\.BMP|\.PNG)$", $filename)) { // hvis fil er en billedfil
    $piccy[$count] = $filename;
    $count++;
  }
}
// LUK DIR
closedir($handle); 
// SORTERE FILERNE
sort($piccy);
reset($piccy);

// VISER STORT IMAGE
if ($_GET['large']){ // hvis large er med som query-string
$large = $_GET['large'];
        echo "<html><head><title>" . $pagetitle ."" . $large . "</title></head><body bgcolor=" . $bg . ">";
  echo '<div align="center">';
// HVIS NAVNET ER SAT TIL AT VISES?
//  if ($name=="1") {echo '<br><font face="verdana" color="white" size="1">Billednavn: ' . $large . '</font>';  }
// FIND FORRIGE OG NÆSTE
$i = 0;
$prev = "";
while ( ($piccy[$i] != $large) && ($i < sizeof($piccy)) ) {
    $prev = $piccy[$i];
    $i++;
}
if ($i == sizeof($piccy)-1) {
    $next = "";
} else {
    $next = $piccy[$i+1];
}
// VIS FORRIGE OG NÆSTE
//echo "<br><br>";

echo '<table width="100%" border=0 cellpadding=2 cellspacing=0><tr><td bgcolor="#333e46" width="35%"><b><font face="verdana" size="2" color="white">' . $pagetitle . '</b></font></td>
<td bgcolor="#333e46" align="center" width="30%">';
echo '<button onclick="location.href=\'?large='.$prev .'\';return false;" class="form">[&lt; &lt;]</button>';
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
echo '<button onclick="location.href=\'?large='.$next .'\';return false;" class="form">[&gt; &gt;]</button>';
echo '</b></font></td>

<td bgcolor="#333e46" align="right" width="35%">';
if ($name=="1") {echo '<font face="verdana" color="white" size="2">Billednavn: ' . $large . '</font>';  }
echo '</b></font></td></tr></table>';

// VIS IMAGE
  echo '<table width="100%" border=0 cellpadding=0 cellspacing=0>';
  echo '<tr>';
  echo '<td valign="middle" align="center">
  <table border=15 bordercolor="#333e46" cellpadding=2 cellspacing=0><tr><td bgcolor="black">
  <a href=' .$filnavn.'><img src="'.$large.'" alt="'.$large.'" border=0></a>
  </td>
  </tr>
  </table>
  </td>';
  echo '<br>';
  echo '</tr></table>';
  echo '<br>';
  echo '<center><button onclick="location.href=\''.$filnavn .'\';return false;" class="form">Tilbage til galleri</button>';


// NO PROBLEMO, LAVER TABLER FOR THUMBNAILS:
} else { // hvis large ikke er med som query-string

// START TABLE SAET cellpadding, cellspacing, colors, 
echo '<html><head><title>'. $pagetitle .'</title>';
echo '<head>';
echo "<body bgcolor=" . $bg . ">";
echo '<table width="100%" border=0 cellpadding=1 cellspacing=0><tr><td bgcolor="#333e46"><b><font face="verdana" size="5" color="white"><a href="'.$sti .'">' . $pagetitle . '</a></b></font></td><td bgcolor="#333e46" align="right"><a href="'.$sti .'"><img src="' .$grafiksti .'fdflogo_lille.gif" border=0></a></td></tr></table>';
echo '<br><b><center><font face="verdana" size="1" color="white">Klik på et billede for at vise det i stort format!</b></font></center><br>';
echo '<table width="100%" border=0 cellpadding=3 cellspacing=0>';
echo '<tr>';
// FORDI <TD> DET ER SAT AF BRUGER, LAV THE PERCENTAGES:
$divider=ceil(100/$td);
if (($divider*$td)>100) $divider--;

// HENT IMAGES
for ($l=0;$l<=sizeof($piccy)-1;$l++){
  $isend = strpos((($l)/$td),".");
  if (!$isend && ($l!=0)){
  echo "</tr>\n<tr><td colspan=$td><br></td></tr>\n<tr>\n";
  }
  if ($l==0){
  echo "\n";
  }
  // START <TD>
  echo '<td width="'.$divider.'%" valign="middle" align="center">';
  // FA STORT BILLEDE (IF SELECTED)
  echo '<table border=8 bordercolor="#333e46" cellpadding=2 cellspacing=0><tr><td bgcolor="black">';
  echo "<a href=\"$PHP_SELF?large=" . $piccy[$l] . "\">";

  // VISER THUMBNAILS
  $thumb_mappe = $thumbnail_mappe . "/"; // vi sætter en skråstreg efter undermappens navn
  $thumb_name = $thumb_mappe . "thumbnail_" . $piccy[$l];

 
  if (eregi("(\.jpg|\.JPG)$", $piccy[$l])) { // hvis filtype er jpg
    if(!file_exists($thumb_name)) {
  imageresizejpeg($piccy[$l],$maxwidth,$maxheight,$thumb_name) ;
    } else {
  $size=getimagesize($piccy[$l]); // laver et array med width og hight
  get_size($size,$maxwidth,$maxheight) ;
    } 
  echo '<img src="' . $thumb_name . '" alt="' . $piccy[$l] . '" border=0 width="' . $newwidth .'" height="' . $newheight .'"></a></td></tr></table>';
  } else { // hvis filtype ikke er jpg
  $size=getimagesize($piccy[$l]); // laver et array med width og hight
  get_size($size,$maxwidth,$maxheight) ;
  echo '<img src="' . $piccy[$l] . '" alt="' . $piccy[$l] . '" border=0 width="' . $newwidth .'" height="' . $newheight .'"></a></td></tr></table>';
  }
  // OM NAVNET ER SAT TIL AT BLIVE VIST?
  if ($name=="1") {
  echo '<center><font face="verdana" color="white" size="1">' . $piccy[$l] . '</center></font>';
  }
  echo '</td>';
  echo"\n";
} // for-løkken slutter
  echo '</tr></table></div>';
  echo '<br><center><button onclick="location.href=\''.$sti .'\';return false;" class="form">Tilbage til oversigt</button>';

} // else slutter
  echo '<br><br><br><div align="center"><font face="verdana" size="1"></a></font></div></body></html>';
?>
Avatar billede nemlig Professor
11. november 2008 - 20:22 #11
Bemærk at filnavnene skal indeholde lovlige tegn. ÆØÅæøå og mellemrum duer ikke.
Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 20:23 #12
Det lader til det er noget jeg kan finde ud af. Det vil sige at alt koden ligger i head.php - fotothumb.php virker kun som fremvisningsside?
Avatar billede Asger Carlsen Nybegynder
11. november 2008 - 20:30 #13
Jeg siger mange tak for koden, jeg vil igang med at kigge på den. Læg et svar, for du tjener point for din hjælp.
Avatar billede nemlig Professor
11. november 2008 - 20:38 #14
Primær kode ligger i fotothumb.php, hvor head.php er nogle opsætninger, som du ikke behøver at ændre i første omgang.

Skriv bare tilbage, hvis noget driller.
Avatar billede Asger Carlsen Nybegynder
12. november 2008 - 16:30 #15
Har pillet resize delen ud, og fået tilpasset min egen kode, og det virker som det skal med alle størrelser af jpg. Burde den også kunne tage .gif filer?
Avatar billede nemlig Professor
12. november 2008 - 16:46 #16
Ja - det kan den.
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