Avatar billede alex15 Nybegynder
17. juni 2008 - 16:23 Der er 64 kommentarer og
1 løsning

billedegalleri del1 - hvordan gøres det i store træk

Hej Eksperter

Jeg har tidligere været inde på hvordan jeg laver mig et billedegalleri, men nu vil jeg altså i gang med det. Derfor vil jeg høre jer om hvilke områder jeg skal lærer om. For at opbygge et sådan billedegalleri, som kan opfylde mine krav.

Min krav er følgende:

- Billedegalleri

- Upload af billedeserier (gerne flere billeder af gangen).

    - Kompromering af billeder (Billederne skal kompromeres så meget som muligt, uden at kvaliteten helt forsvinder self. Lidt ligesom facebooks billeder)

    - Små billeder (Ved upload af billederne skal de også laves  i størrelse ca. 40*30px som skal bruges til at vise en oversigt over alle billeder i en billedeserie, så man ikke skal "download" alle billederne i fyld størrelse hver gang man vil se en billedeserie).

- Begrænset Adgang (Kun folk med en bestemt $_SESSION['xxx'] skal have adgang til billedegalleriet).

-------- Hvad ved og kan jeg selv --------

Som udgangspunkt ikke særlig meget. Kan dog godt finde ud af at arbejde med database osv. Men har lavet mig fortælle at man ikke skal lave billederne ligge inde i selv databasen, man kan lige så godt lade dem ligge i forskellige mapper som man opretter.

----- SVAR -----

Begrænset adgang (der skal jeg vist kigge på noget med .htaccess og så readfile() - er det korrekt???)

Komprimering af billeder (Der kan jeg vist bruge gd-lib, men findes der andre måder?)

..............

Men ellers må i gerne komme på lidt bud eller f.eks. forskellige Tutorials som forklare hvor jeg skal starte og hvordan jeg skal gøre.

Med Venlig hilsen

Alexander Christensen
Avatar billede jakobdo Ekspert
18. juni 2008 - 11:13 #1
En lille smule info fra mig...

- Billedegalleri

- Upload af billedeserier (gerne flere billeder af gangen).
-- Via normal html/php upload, kan du kun uploade en fil ad gangen.
-- Multiupload kan evt. laves via Flash eller en Javaapplet, som så bagved kalder et standard php upload pr fil.

- Kompromering af billeder (Billederne skal kompromeres så meget som muligt, uden at kvaliteten helt forsvinder self. Lidt ligesom facebooks billeder)
-- Du mener vel komprimering. Man kan sænke kvaliteten og resize dem, det vil spare noget data.
-- Med egen server, kan man også lave noget med gzip måske, så data sendes komprimeret.

- Små billeder (Ved upload af billederne skal de også laves  i størrelse ca. 40*30px som skal bruges til at vise en oversigt over alle billeder i en billedeserie, så man ikke skal "download" alle billederne i fyld størrelse hver gang man vil se en billedeserie).
-- Kig f.eks. her: http://www.eksperten.dk/artikler/1200

- Begrænset Adgang (Kun folk med en bestemt $_SESSION['xxx'] skal have adgang til billedegalleriet).
-- Mappen med billeder skal beskyttes af en .htaccess fil, så billederne ikke kan åbnes direkte, og så skal billederne hentes via php.
Avatar billede alex15 Nybegynder
18. juni 2008 - 13:42 #2
Hej Jakob, det er sjovt at det lige er dig som skriver, for stødte faktisk på lige præcis din profil igår, da jeg sat og søgte om forskellige ting til billedegalleriet her inde på eksperten. Og var så inde og se lidt på dine forskellige artikler. Selv om de fleste af dem er rene koder, ser de alligevel meget gode ud. Så vil lige prøve og sætte mig lidt ind i dem, Er helt sikker på at jeg godt kan få noget ud af det.

mht.
- Upload af billedeserier (gerne flere billeder af gangen).
-- Via normal html/php upload, kan du kun uploade en fil ad gangen.

Kan man så ikke bare lave en eller anden form for while()?? Så man gentager uploadingen 5 gange? Eller skal det gøres via. Flash eller en Javaapplet?
- Du har selv lavet følgende artikel: http://www.eksperten.dk/artikler/1098 med en upload funktion. Man kan ikke bare "kopier" den f.eks. 5 gange? (I store træk).

mht. (Begrænset Adgang)
Ja, læste godt nok noget om der der .htaccess fil. Men kan man ikke bare klikke på højre mussetast på ens mappe i ens ftp program og sætte den pågældende mappe som undermapper til at være: Numerisk værdi 775? og Rekursivt i undermapper (Skal gælde alle filer og mapper). Men så kan man jo ikke bare gå ind og læse filen via www.xxx.dk/billeder/billede.jpg?

Derefter skal man bruge der der readfile(), som skal gå ind og sørge for at man har adgnag til de pågældende filer. som så smider arbejder sammen med en php fil som viser den i ens browser? eller hvad?

Sorry hvis det er meget sort det som jeg skriver, men det skyldes at jeg har lidt svært ved at forstå hvordan det hele fungere mht. upload, fil beskyttelse osv.
Avatar billede jakobdo Ekspert
18. juni 2008 - 15:18 #3
Man kan selvfølgelig lave at man kan vælge fil1, fil2, fil3 osv...
Og så uploade X antal filer i et hug.
Avatar billede alex15 Nybegynder
18. juni 2008 - 15:35 #4
Efter at have siddet og tænkt lidt over den. Tror jeg faktisk at jeg er kommet frem til en løsning på hvordan jeg kan gøre det.

Hvordan lyder dette?

Generelle oplysninger:

------ START generelle oplysninger -------

- Opret table (Foto) med følgende felter (id, usersid, hold, dato & titel)

$_SESSION['personid'] == row['id']; // Vi giver man id 1.

------ SLUT generelle oplysninger -------

- Ved oprettelse af ny foto album sker følgende:
--- opretter et ny række i tablen (foto) hvor den udfylder ovenstående felter. SAMT opretter en mappe med det pågældende id nummer //Her '1'. uder mappen foto.
--- Derefter sender den personen til f.eks. Foto_ret.php?id=1 //henter id på den pågældende foto album man lige har oprettet.
--- Her inde kan man så oploade og slette billeder fra mappe med ?id=1 . På den måde kan man sikre sig at folk som ikke har adgang via med følgende: $_SESSION['personid'] == $row['usersid'] heller ikke har adgang den er uploade billeder mv. til denne mappe.

Hvis du forstår hvad jeg mener.

Ved du hvordan man via php kan oprette en undermappe til foto via php? Eller sker det automatisk hvis man uploader er billede til f.eks. foto/1/ ?
Avatar billede jakobdo Ekspert
18. juni 2008 - 19:20 #5
Det med at lade php oprette mapper og lign, kan give problemer på visse hoteller.
Så overvej evt. at styre "mapper"/samlinger af billeder i ren mysql og smid billederne i en og samme mappe, alternativt gem billeder i databasen, men det vil andre nok ikke anbefale. :o)
Avatar billede alex15 Nybegynder
18. juni 2008 - 20:10 #6
Hmm.. ja okay. Men hvordan ville du så gøre det. Mener hvis der alle billederne ligger i en stor mappe.. Så ordne dem efter fil navne? altså kunne lade det styre på den måde.

Nej, har også hørt at det ikke skulle være så smart og smide billederne ind i databasen..

Okay, men hvordan finder jeg ud af om der skal være problemer med min hotel?
Avatar billede jakobdo Ekspert
18. juni 2008 - 20:22 #7
Jeg ville nok lave det som:

$filename = md5($filens_navn);
Så har du alle billeder som en md5 hash gemt i en stor mappe.
Hvilke billeder der så hører til en mappe, styres 100% i en database.
Avatar billede alex15 Nybegynder
18. juni 2008 - 22:49 #8
Hmm. Men hvordan vil du så linke til filerne? Mener det ender jo med at der kommer til at ligge serisøt mange billeder i den ene mappe, må da gøre det ret langsomt med tiden?

Men hvorfor er det at man ikke bare kan oprette en mappe via php?
Avatar billede jakobdo Ekspert
19. juni 2008 - 06:41 #9
At der kommer til at ligge mange filer i mappen, bør ikke gør det store.
Alle billeder vil blive kaldt med navn, og du burde derfor ikke have brug for en listning af mappens indhold.

Mapper opretter med php, bliver nogle gange ejet af php-scriptet.
Og når scriptet så er færdigt, så har du ikke de rigtige rettigheder til at putte ting i mappen efterfølgende.
Jeg siger også kun det kan blive et problem, hvis ikke det er et problem hos din udbyder, så kan du jo overveje den løsning.

Der er jo altid flere løsninger på samme problem/opgave, så brug den som passer dig bedst.
Avatar billede alex15 Nybegynder
19. juni 2008 - 14:58 #10
Okay ja, Var lige lidt rundt på nettet for at finde ud af hvordan jeg via php kan oprette en mappe. og det ser ud som om at jeg skal bruge mkdir() så det må jeg lige læse lidt om.

Mht. en .htaccess fil. Er det så det samme som når man via. ens ftp program kan give de forskellige mapper forskellige attributter (nummerrisk værdi) eller hvad det nu hedder. som f.eks. 777 (Hvor alle har adgang til alle filer).?
Avatar billede jakobdo Ekspert
19. juni 2008 - 17:59 #11
Prøv at opret en mappe og smid følgende indhold i en .htaccess fil i den mappe:

order deny, allow
deny from all
Avatar billede alex15 Nybegynder
19. juni 2008 - 19:39 #12
Okay. Det er lige gjort. Og det medførte at jeg nu stadigvæk kan uploade billeder til min foto mappe (via din kode). Men at jeg ikke længere via. f.eks. www.hjemmeside.dk/foto/billede1.jpg gå ind på det. - Hvilket er godt.

Men hvordan kan jeg via en php kode få adgang til disse filer så?
Avatar billede jakobdo Ekspert
19. juni 2008 - 20:03 #13
Noget i stil med dette burde gøre det:


$filename = '/foto/billede1.jpg';

$file_extension = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );

if (!file_exists($filename)) {
    die("NO FILE HERE");
}

header("Content-Type: image/jpg");
header("Content-Length: ".@filesize($filename));
@readfile("$filename") or die("File not found.");
Avatar billede alex15 Nybegynder
20. juni 2008 - 08:30 #14
Så langt, så godt :o) - Nu er billederne "afskåret" for omverden.

Og kan ved at lave en fil med følgende:

<?php

//Din tekst ovenover

?>

komme til at se mit billede korrekt.

Problemet er bare at jeg kun kan se billede, hvis IKKE der er sendt noget med header afsted i forvejen. Og dette vil jo altid komme til at ske, hvis man først vil vise dette billede, senere på siden/koden. For hvis jeg smider denne fil ind i en side smider den bare følgende tilbage:

"ÿØÿà&#65533;JFIF&#65533;&#65533;–&#65533;–&#65533;&#65533;ÿáØExif&#65533;&#65533;MM&#65533;*&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;b&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;j(&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;1&#65533;&#65533;....... osv"

Så det må være noget med at den har sendt header afsted, right? - Nogle forslag til hvordan dette problem løses?
Avatar billede alex15 Nybegynder
20. juni 2008 - 10:48 #15
Okay, den del fandt jeg også ud af. Smed din del af filen i en fil for sig selv. og så linkede jeg til den på denne måde:

echo '<img src="billede.php" />'; I den fil hvor jeg ønsker at fremvise billede.

---

og på denne måde kan jeg få den til at fremvise ALLE billederne i mappen:

foreach (glob("foto/".$id."/*.*") as $filename) {
    echo '<img src="foto_billede.php?id='.$filename.'" /><br><br>';
}

Har lige et andet spørgsmål også. Men skriver det lige senere, prøver lige og jeg kan finde ud af det selv.
Avatar billede jakobdo Ekspert
20. juni 2008 - 11:36 #16
Fedt når der er en bruger som forsøger lidt selv.
Mange her på eksperten er blevet for dovne, så de sætter jeg blot tilbage og venter på en gider løse deres problem.
Avatar billede alex15 Nybegynder
20. juni 2008 - 11:44 #17
Så lærer man bare ikke lige så meget ;o)

Men vender som sagt lige tilbage når jeg går død igen. Lige nu kører det bare der ud af.
Avatar billede alex15 Nybegynder
23. juni 2008 - 09:14 #18
Hej igen Jakob

Har lige et spørgsmål, jeg vil gerne have fundet ud af hvad størrelsen på det billede som jeg har uploadet er. og til der har jeg læst mig frem til at man kan bruge følgende kode:

$filename = "billeder/test.jpg";
list($widht, $height, $type, $attr) = getimagesize($filename);
echo "$widht - $height";

Men her finder den størrelsen på mit eget billede, hvad skal man skrive for at den finder størrelsen på det billede man uploader. Har prøvet med følgende:

list($widht, $height, $type, $attr) = getimagesize($_FILES['myFile']['name']);

Dette virker dog bare ikke? Nogle forslag til hvad jeg kan gøre?
Avatar billede alex15 Nybegynder
23. juni 2008 - 09:18 #19
Svar: (Højde og brede på billede)
list($widht, $height, $type, $attr) = getimagesize($_FILES['myFile']['tmp_name']);

Fandt lige ud af det. :o)
Avatar billede jakobdo Ekspert
23. juni 2008 - 09:20 #20
:o)
Avatar billede alex15 Nybegynder
23. juni 2008 - 09:53 #21
Har sidder og kigget lidt på din kode i weekenden. Og synes lidt at der mangler noget ved det. f.eks. når man uploader et billede, bliver det billede som man uploader i den størrelse som billede nu engang er. Hvilket ikke er ønsket (Da man gerne vil kunne bestemme størrelse på billede selv)

Derfor har jeg i toppen lavet følgende kode:

//BIG SETTINGS
$bigDir        = 'foto/album/'.$id.'/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$bigPrefix      = 'big_';  //Hvad skal tilføjes til originalt filnavn?
$bigHeight      = 550;      //Thumb højde
$bigWidth      = 413;      //Thumb bredde
$bigQuality    = 50;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

//SMALL SETTINGS
$thumbDir        = 'foto/album/'.$id.'/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$thumbPrefix      = 'small_';  //Hvad skal tilføjes til originalt filnavn?
$thumbHeight      = 175;      //Thumb højde
$thumbWidth      = 116;      //Thumb bredde
$thumbQuality    = 50;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

og senere følgende:

if(resize($uploadDir . basename("$antal".".$extension"), $bigDir . $bigPrefix . basename("$antal".".$extension"), $bigWidth, $bigHeight, $bigQuality))...

if(resize($uploadDir . basename("$antal".".$extension"), $thumbDir . $thumbPrefix . basename("$antal".".$extension"), $thumbWidth, $thumbHeight, $thumbQuality))...

Problemet er bare at den IKKE gider at gennemfører resize() 2 gange? - Hvad kan dette skyldes?
Avatar billede alex15 Nybegynder
23. juni 2008 - 10:23 #22
Problemet løst igen (Sorry)

Svar:

if(((resize($uploadDir . basename("$antal".".$extension"), $bigDir . $bigPrefix . basename("$antal".".$extension"), $bigWidth, $bigHeight, $bigQuality)))
&&
((resize($uploadDir . basename("$antal".".$extension"), $thumbDir . $thumbPrefix . basename("$antal".".$extension"), $thumbWidth, $thumbHeight, $thumbQuality)))){
Avatar billede jakobdo Ekspert
23. juni 2008 - 10:29 #23
:o)
Avatar billede alex15 Nybegynder
23. juni 2008 - 10:40 #24
Okay, her kommer et til. (Som jeg umelbart ikke selv kan løse).

Når jeg sender billeder afsted fungere alt nu som det skal. Pånær hvis billederne kommer op i en hvis størrelse. (Efter et par test ca. 0,5 mb). Der bliver skærmen hvid, i stedet for at man bliver sendt tilbage til upload siden (Sådan har jeg gjort det hos mig).

Hvordan kan det være? - Ved at der findes noget med en tidsbegrænsning på header eller sådan noget. - og regner med at det er der fejlen ligger. Hvordan kan man via php ændre på denne?
Avatar billede jakobdo Ekspert
23. juni 2008 - 10:45 #25
Det er skærmen bare bliver hvid, skyldes af billedet er for stort og derfor stopper afviklingen af scriptet.
Hvis du har egen server, skal memory sættes op.
Hvis ikke, så er det bare trist.
Du kan evt. overveje at lave en getimagesize() på billedet inden du begynder af GDLIB behandle billedet, så kan det være du kan fange og stoppe behandling af de store billeder.
Avatar billede alex15 Nybegynder
23. juni 2008 - 11:02 #26
Okay ja. Så det har som sådan ikke noget med hvor meget billede fylder (Mb) men i stedet hvor stort billede er (px * px)?
Avatar billede alex15 Nybegynder
23. juni 2008 - 11:04 #27
Det kunne ikke hjælpe at sætte set_time_limit(xxx); til f.eks. 100?
Avatar billede jakobdo Ekspert
23. juni 2008 - 11:20 #28
Tjek, det er ikke MB, men H x W (pixels)
Og set_time_limit() vil ikke hjælpe nej.
Det er hvor meget hukommelse et script må bruge under eksekvering.
Avatar billede alex15 Nybegynder
25. juni 2008 - 11:46 #29
Hej igen Jakob.

Lige et spørgsmål mere. Hvordan kan det være at mine billeder stadigvæk fylder så forfærdeligt meget? selv om kvaliteten er blevet sat ned til 30%? f.eks. fylder upload filen 300 kb og når jeg så har gjort denne fil mindre, og så størrelsen ca. 550px / 350px fylder den nu 200kb? - Men går man derimod ind på facebook f.eks. så fylder alle deres billeder kun ca. 30-40 kb? uden at deres billede kvalitet er speciel ringe?

Hvordan kan det være? og hvordan kan man få billederne til at fylde lige som deres?
Avatar billede alex15 Nybegynder
25. juni 2008 - 11:52 #30
Hov, kan se at det faktisk er png filer som ikke er mulige at komprimere særligt meget, derved kunne man jo evt. undlade at give folk lov til at uploade disse filer? eller kan man godt være lave en png fil om til jpg? da jpg fylder KLART mindst?
Avatar billede jakobdo Ekspert
25. juni 2008 - 13:27 #31
Du kan godt lade dine brugere uploade: bmp, png, gif og jpeg og så gemme dem alle som jpg.
De fylder klart mindre ja.
Avatar billede alex15 Nybegynder
25. juni 2008 - 14:02 #32
Okay ja, er det noget som er meget svært og tilføje til den kode som jeg allerede bruger / har fået fra dig?

går ud fra at det er her det skal rettes:

function resize4( $filename, $newfilename, $maxw, $maxh, $quality=30 )
{
  $extension = getExtension4($filename);
  switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $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 );
  switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}
Avatar billede jakobdo Ekspert
25. juni 2008 - 14:17 #33
Du retter blot disse linjer:

switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }

til:

imagejpeg( $dstim, $newfilename, $quality );

Dog skal $newfilename så ende på .jpg.
Avatar billede alex15 Nybegynder
25. juni 2008 - 14:30 #34
okay, altså på denne her måde?

return file_exists($newfilename.".jpg");

eller er det her nede du mener?

resize($uploadDir . basename("$antal".".jpg"), $bigDir . $bigPrefix . basename("$antal".".$extension"), $bigWidth, $bigHeight, $bigQuality) ???
Avatar billede jakobdo Ekspert
25. juni 2008 - 14:41 #35
Selve filen bliver gemt i dette kald:
imagejpeg( $dstim, $newfilename, $quality );

Så enten skal du lave noget kode, som retter $newfilename til at ende på .jpg.
Eller også skal du bare kalde resize(....);
Så $newfilename allerede der ender på .jpg, hvilket nok er den nemmeste løsning.
Avatar billede alex15 Nybegynder
25. juni 2008 - 16:10 #36
Sådan.

Ændrede følgende som du sagde:

switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }

til:

imagejpeg( $dstim, $newfilename, $quality );

og derefter

resize4($uploadDir . basename("$antal".".$extension"), $bigDir . $bigPrefix . basename("$antal".".jpg"), $bigWidth, $bigHeight, $bigQuality)

Og så virkede det :o)
Avatar billede alex15 Nybegynder
25. juni 2008 - 16:40 #37
Og på denne måde sletter man den uploadede fil som man IKKE ønsker at bruge:

foreach (glob("foto/album/upload_*.*") as $filename) {
    unlink($filename);
}

:o)
Avatar billede jakobdo Ekspert
25. juni 2008 - 17:21 #38
Så er det da dumt at uploade/gemme den i første omgang! :o)
Så det bør du kunne lave smartere, at filen slettes.
Avatar billede alex15 Nybegynder
25. juni 2008 - 17:35 #39
Bliver man da nød til. Ellers kan jeg jo ikke "resize" dem?
Avatar billede jakobdo Ekspert
25. juni 2008 - 17:44 #40
Jo, du kan resize direkte fra: $_FILES['tmp_name']
Avatar billede jakobdo Ekspert
25. juni 2008 - 17:45 #41
Du skal så lige lave koden lidt om, da tmp_name ikke indeholder filens endelse.
Den skal du så have fra selve filens navn.
Men det kan jo hurtigt laves, ved at rette lidt på resize() funktionen.
Avatar billede alex15 Nybegynder
25. juni 2008 - 17:47 #42
hmm.. nårh ja, den havde jeg faktisk ikke lige tænkt over. Prøver lige at rette det ;o)

Ved du hvordan man evt. går ind og henter fil/billede nummer 4 ud af 25 i en bestemt mappe?
Avatar billede alex15 Nybegynder
25. juni 2008 - 17:51 #43
Man kan vel gøre det på denne her måde:

$i = 1;

foreach (glob("foto/album/".$id."/big_*.*") as $filename) {
    echo "$i<br>"; $i++;
}

Så får man inddelt dem i nummerrækkefølge i hvert fald. :D Tror godt jeg kan bruge den metode. Skriver lige hvis den ikke kan bruges.
Avatar billede alex15 Nybegynder
25. juni 2008 - 18:57 #44
Ved du hvordan man centerer et billede i en voks både vertikalt og huisontalt?

horisontal = text-align:center;

Men hvordan gør man det vertikalt?
Avatar billede alex15 Nybegynder
25. juni 2008 - 20:41 #45
Problem løst:

//Henter højde og brede på billede
list($widht, $height, $type, $attr) = getimagesize($filename);

//Henter hvor meget px. der er fra toppen af billede til toppen af boksen.
<?php if($height < 113){$top = (112 - $height) / 2;} ?>

//Retter padding til at være den bestemte højde.
<div class="boks" style="padding:<?php echo "$top"; ?>px 0px <?php echo "$top"; ?>px 0px;">

På den måde regner med ud hvor stor padding skal være både i bunden og højden.

:o)
Avatar billede jakobdo Ekspert
25. juni 2008 - 21:18 #46
:o)

Du kunne måske også lave:

text-align: center;
vertical-align: middle;
Avatar billede alex15 Nybegynder
25. juni 2008 - 21:56 #47
Ja, den var jeg også indeover. Men den virkede ikke. Ikke i Firefox i hvert fald ;o)

ps. Har også fået kodet det sådan at jeg nu kan uploade 5 billeder på engang :D
Avatar billede alex15 Nybegynder
26. juni 2008 - 14:10 #48
Hej Jakob.

Nårh, så kommer der faktisk ikke til at være flere dumme spørgsmål fra min side af (Til dette emne i hvert fald). Er lige blevet færdig med hele billedegalleriet. Super fedt og KUN takket være din fantastiske hjælp.

Nok den største omgang hjælp jeg har fået på eksperten siden jeg oprettede min profil for 6 år siden.

Så 2 ting, laver du ikke lige et svar samt smider mig en mail på alexholte@gmail.com?

Tak for hjælpen :o)
Avatar billede jakobdo Ekspert
26. juni 2008 - 14:28 #49
Svar!
Avatar billede alex15 Nybegynder
26. juni 2008 - 14:36 #50
Spørgsmål afsluttet :o) mail afsendt.
Avatar billede jakobdo Ekspert
26. juni 2008 - 14:38 #51
Takker for point.
Avatar billede alex15 Nybegynder
02. juli 2008 - 22:29 #52
Hej igen Jakobdo.

Nu har jeg lige fået skiftet server. Og min grænse for upload er 2mb pr. upload. Hvilket gør at man IKKE kan upload billeder som fylder 3mb, typisk størrelsen på et billede tager direkte fra kameraet.

Jeg tager lige en snak med min udbyder om jeg ikke kan få ændret denne grænse.

Men mit spørgsmål lyder så på følgende:

Hvordan undgår jeg at skulle download billede ned på serveren samt derefter at slette det? (I den "rene" kvalitet altså).

min kode ser som du nok ved, således ud:

//SETTINGS
$uploadDir        = 'foto/album/'.$id.'/upload_'; //Bibliotek, hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png','jpeg', 'jpe'); //Hvilke filer vil vi acceptere bliver uploadet?
//BIG SETTINGS
$bigDir        = 'foto/album/'.$id.'/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$bigPrefix      = 'big_';  //Hvad skal tilføjes til originalt filnavn?
$bigHeight      = 413;      //Thumb højde
$bigWidth      = 550;      //Thumb bredde
$bigQuality    = 50;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

//SMALL SETTINGS
$thumbDir        = 'foto/album/'.$id.'/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$thumbPrefix      = 'small_';  //Hvad skal tilføjes til originalt filnavn?
$thumbHeight      = 112;      //Thumb højde
$thumbWidth      = 150;      //Thumb bredde
$thumbQuality    = 80;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

//Højde og brede på billede
list($widht, $height, $type, $attr) = getimagesize($_FILES['myFile1']['tmp_name']);

//Funktioner som bruges:
function getExtension1($filename){
    return strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
}

function resize1( $filename, $newfilename, $maxw, $maxh, $quality=30 )
{
  $extension = getExtension1($filename);
  switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $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, $quality );
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}

//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload']))
{
  //Har vi en fil?
  if(is_uploaded_file($_FILES['myFile1']['tmp_name']))
  {
    //Filendelse
    $extension = getExtension1($_FILES['myFile1']['name']);
   
    //Er filen en af de filer vi gerne vil have?
    if(in_array($extension,$allowedFileTypes))
    {
      //Vi flytter filen fra tmp til vores UPLOADDIR
      if(move_uploaded_file($_FILES['myFile1']['tmp_name'],$uploadDir . basename("$antal".".$extension")))
      {
     
          if(((resize1($uploadDir . basename("$antal".".$extension"), $bigDir . $bigPrefix . basename("$antal".".jpg"), $bigWidth, $bigHeight, $bigQuality)))
        &&
        ((resize1($uploadDir . basename("$antal".".$extension"), $thumbDir . $thumbPrefix . basename("$antal".".jpg"), $thumbWidth, $thumbHeight, $thumbQuality)))){
             
            //Billede blevet uploadet korrekt
            $_SESSION['myscupload1'] = "av148e6f41a8f14a";
            $antal++;
           
          }else{
            //uploaded succesfully, but resize failed
            $_SESSION['myscupload1'] = "fa4e4aec1dds1d3acds";
            $antal++;
        }
       
      }
      else
      {
        //Error - unable to upload file
        $_SESSION['myscupload1'] = "4s8f1e4a8f6e4a1ea";
      }
    }
    else
    {
    //Wrong filetype, allowed filetypes are
    $_SESSION['myscupload1'] = "fv41e8af14ea86cd41";
    }
  }
  else
  {
    //No file selected
    $_SESSION['myscupload1'] = "dc48D14XSA14D53SAD4";   
  }
}


---------------------

Går ud fra at jeg skal slette den som hedder:

move_uploaded_file($_FILES['myFile1']['tmp_name'],$uploadDir . basename("$antal".".$extension")???

og så rette denne:

(resize1($uploadDir . basename("$antal".".$extension"), $bigDir . $bigPrefix . basename("$antal".".jpg"), $bigWidth, $bigHeight, $bigQuality)

med følgende:

$uploadDir . basename("$antal".".$extension") = $_FILES['myFile1']['tmp_name']

Eller hvordan skal jeg gøre det?

---

Og til sidst. Vil det overhoved ændre på den grænse som er sat til de 2 mb, forstået på den måde at nu downloader den jo ikke længere de 3 mb ned på serveren, men i stedet beholder den bare billede i scriptet, for derefter at slette det når scriptet er færdigt. og så KUN download de komprimerede billeder!

Mvh.

Alex
Avatar billede jakobdo Ekspert
02. juli 2008 - 22:36 #53
Du vil altid være nød til at uploade hele filen, om det er 2mb, 5mb eller 10mb.
Så er grænset 2mb, bliver brugeren nød til at resize filen lokalt, inden den uploades.
Alternativt kunne man måske bruge en javaapplet eller flash applikation, som splitter filen og samler den igen på serveren.
Avatar billede alex15 Nybegynder
02. juli 2008 - 22:42 #54
Tak for det hurtige svar.

Okay ja, men så er der ikke andet og gøre end at snakke med min udbyder om at få ændret denne grænse.

Der er også følgende andre afgrænsninger:

Resource Limits:
max_execution_time: 30
max_input_time: 60
memory_limit: 32mb

Hvad betyder de forskellige?

For ville være meget rart hvis jeg også kunne få ham til at ændre på de nødvendige nu når jeg var igang.
Avatar billede jakobdo Ekspert
03. juli 2008 - 06:57 #55
max_execution_time: 30 <-- Et script må max være 30 sekunder om at blive afviklet
max_input_time: 60 <-- This sets the maximum time in seconds a script is allowed to parse input data, like POST, GET and file uploads.
memory_limit: 32mb <-- Et script må max bruge 32mb i hukommelsen. Et billede i 1600x1200 bruger en pæn sjat.
Avatar billede alex15 Nybegynder
03. juli 2008 - 09:26 #56
Okay ja, Så må man formode at max_execution_time: 30 er fint nok.

Men at jeg skal have ændret max_input_time: til noget højere! right?
Avatar billede jakobdo Ekspert
03. juli 2008 - 09:58 #57
Jeg tror ikke som udgangspunkt det er den som giver problemer.
Avatar billede alex15 Nybegynder
03. juli 2008 - 11:48 #58
okay ja. Og denne her begrænsning:

upload_max_filesize: 2M

;o) - Den gør vel at der ikke kan uploads filer over 2mb, må jeg gå ud fra.
Avatar billede jakobdo Ekspert
03. juli 2008 - 11:54 #59
Lige præcis.
Avatar billede alex15 Nybegynder
03. juli 2008 - 12:04 #60
Okay, snakkede lige med danhost om det. Og de siger at jeg bare skal oprette den php.ini fil, hvor jeg selv kan gå ind og ændre på disse begræsninger.

Er det noget som du har prøvet før?

Var lige inde og gøre lidt på det på php manual'en. Og syens ikke rigtig der stod hvordan man gjorde, og hvad man skulle skrive. Men tror du bare at man kan gøre det på denne måde:?

opret fil (php.ini)

php.ini:

max_execution_time(400);
upload_max_filesize(20M);

Virker måske lidt for let ik? :D
Avatar billede jakobdo Ekspert
03. juli 2008 - 12:26 #61
Tjo, men det lyder godt nok usikkert, hvis du bare selv kan lave din egen php.ini.
Men du kan jo prøve engang.
Og ellers kan du kigge på: ini_set()
Avatar billede alex15 Nybegynder
03. juli 2008 - 13:10 #62
Okay, så langt så godt.

Nu kan jeg uploade 2 billeder i størrelsen 3mb pr stk.

Men lige så snart at uploadingen tager længere end præcis 90 sek, så stopper den scriptet og smider mig tilbage til upload siden, uden noget advarsel eller noget?

Hvad mon jeg skal gå ind og rette på. nogle forslag?

Min php.ini fil ser således ud nu:

max_execution_time = 1000 ;
max_input_time = 1000 ;
memory_limit = 128M ;
upload_max_filesize = 128M ;
Avatar billede jakobdo Ekspert
03. juli 2008 - 13:29 #63
Du kan jo prøve om:
set_time_limit(0);
gør en forskel.
Avatar billede alex15 Nybegynder
03. juli 2008 - 13:54 #64
Fandt fejlen :o)

Når smed:

set_time_limit(0);

ind i scriptet fuckede det helt op. hehe.

Men ændrede post_max_size til 20M hvor den før stod til 8M. Hvilket gjorde forskellen. Så nå ser min php.ini fil således ud:

max_execution_time = 1000 ;
max_input_time = 1000 ;
memory_limit = 128M ;
upload_max_filesize = 128M ;
post_max_size = 20M ;

Tak fordi at du gad og hjælpe mig.

Forsat god dag

Alex
Avatar billede jakobdo Ekspert
03. juli 2008 - 14:14 #65
Helt i orden Morten... :o)
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