Avatar billede supermichael Nybegynder
02. december 2004 - 23:13 Der er 33 kommentarer og
1 løsning

Hvordan får jeg php's genererede billede til at fylde mindre?

Hej... Jeg roder lidt med noget auto-thumbernail til en lille wapside jeg har lavet. Jeg har fundet ud af at lave det således at der automatisk genereres en thump til hvert billede.. Jeg har bare lidt problemer med størreslen..

Scriptet er nakket pra php's side, med en enkelt tilføjelse.. (det første)
Mit problem er bare at ligemeget hvad jeg ændre kvaliteten til (i imagejpeg() i  bunden af scriptet) ændre den ikke  størrelse til mindre.. Hvad skal jeg gøre.. findes der en måde at reducere størrelsen på??


scriptet:

<?php
if(!empty($_GET[pic])){
$filename = $_GET['pic'];
}
else{
$filename = 'none.jpg';
}
$percent = 0.3;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, NULL, 75);
?>
Avatar billede Six Nybegynder
02. december 2004 - 23:16 #1
Hvilken størrelse mener du? kb eller højde og bredde ? :D
Avatar billede supermichael Nybegynder
02. december 2004 - 23:24 #2
kb. Det skal jo ikke koste for meget at se previewbilleder.. med en mb pris på 15 kr. løber det jo hurtigt op :D
Avatar billede Six Nybegynder
02. december 2004 - 23:26 #3
Ahh ja det er jo rigtigt, havde ikke lige skænket mb pris en tanke hehe. Jeg vil lige kigge på det, har selv for nyligt lavet et script noget lignende. Lurer lige om mit nedsætter størrelsen på billedet
Avatar billede Six Nybegynder
02. december 2004 - 23:31 #4
Mit script nedsætter kb størrelsen hvis man nedsætter kvaliteten. Er det noget du vil have tilsendt over mail ? :D
Avatar billede supermichael Nybegynder
02. december 2004 - 23:34 #5
Jo tak. det vil jeg da gerne.. super_michael_85@hotmail.com..
Avatar billede Six Nybegynder
02. december 2004 - 23:37 #6
Så er det sendt.
Avatar billede thb Nybegynder
02. december 2004 - 23:43 #7
Husk at hvis der bliver givet eksperten point så skal løsningen være tilgenlig for andre brugere...

Thomas
Avatar billede supermichael Nybegynder
03. december 2004 - 08:50 #8
Jeg har fiflet lidt med dit script, og jeg har fundet ud af at det virker.. Den nedsætter størrelsen, og filtypen den skriver, er også jpeg som den skal være.. Jeg har så gjort opdagelser af hensyn til mit eget.. Den filtype jeg skriver ud, bliver gemt som bmp! hvis jeg gør ligesom dig og placere filen et sted på serveren (imagejpeg($image_p, "sti/til/filen/samt/filnavn.jpg", 75);), nedsætter den også størrelsen..
Men jeg vil så gerne lave det, så der ikke bliver lagt thumbs ud.. så jeg søger stadig hjælp..

by the way.. cool script (dog en mindre fejl: den advare ikke hvis der er lort i chmod)
Avatar billede Six Nybegynder
03. december 2004 - 12:06 #9
Nej det er korrekt, med min chmod fejl. Det har jeg egentlig ikke lige tænkt over :D

Men altså mit script ligger da original billedet i "Pictures" Og et thumb i "Thumbs" Eller det er måske ikke det du mener ?

PS: Hvis mit script bliver en løsning skal jeg nok få det pastet ind her.
Avatar billede coderdk Praktikant
03. december 2004 - 14:50 #10
imagejpeg($image_p, NULL, 75);

75 er kvalitet eller kompressionsniveau, jo lavere, jo mindre fylder det...
Avatar billede supermichael Nybegynder
03. december 2004 - 15:36 #11
Det er jo netop det der er problemet. Det har ingen indflydelse på størrelsen når man viser billedet på den måde jeg gør.. med <img src="pic.php?pic=08.jpg" alt="billede">..
Avatar billede coderdk Praktikant
03. december 2004 - 15:38 #12
Prøv i stedet for NULL, at sætte filename til '' (tom streng), og se om det gør en forskel, du skal højreklikke og gemme som for at se størrelsen...
Avatar billede Six Nybegynder
03. december 2004 - 15:38 #13
Kan du ikke beskrive 100% hvad det er du vil have til at ske, fra start til slut?
Avatar billede hmortensen Nybegynder
03. december 2004 - 15:45 #14
Prøv Ctrl + F5. Det tvinger browseren til at hente hele siden igen.

coderdk, man kan godt se str uden at gemme, og NULL virker fint :)
Avatar billede coderdk Praktikant
03. december 2004 - 15:50 #15
hmortensen, det er, af en eller anden grund, ikke altid den rigtige størrelse den viser i properties, og det kan være at NULL virker fint, men i følge dokumentationen bør det være en tom streng ;)
Avatar billede hmortensen Nybegynder
03. december 2004 - 15:57 #16
Størrelsen vises i bytes, og omregnet til kb, som windows gør + ekstra plads som ingen ved hvor blir af, vil resultatet se anderledes, men stadig være rigtigt.

Havde ikke lige læst dokumentationen for den funktion ;)
Avatar billede supermichael Nybegynder
05. december 2004 - 15:08 #17
Fjappe bad om en bedre forklaring, så her kommer den:

Den egenlige side der skal bruge dette billedescript, er en billedefremviser som jeg selv har lavet. Den bruger en glob funktion til at finde4 alle de billeder der ligger i en mappe. Dernæst kommer der en liste frem hvor der linkes til alle billederne. Over hvert link, skal der være et preview billede, og det er der jeg skal have lidt hjælp.

Det billede der skal vises som preview over hvert link, skal genereres automatisk med scriptet som står i forklaringen. Det er rimelig vigtigt (da det er en wapside der skal skrives) at previewbillederne ikke fylder så meget, men når billederne hentes direkte gennem et href til pic.php?pic=08.jpg, komprimeres billedet ikke, selvom kvaliteten sættes ned. Browseren læser det som et bitmap.

Derfor ville jeg
Avatar billede supermichael Nybegynder
05. december 2004 - 15:13 #18
ups.. fuckup.. jeg kom til at trykke send, med skod det. Jeg fortsætter hvor jeg slap..

Derfor ville jeg hører om der var en mulighed for at loade billedet direkte, gennem den ovenfor beskrevne metode, uden at det bliver lavet til bmp (og derfor kommer til at fylde mere). Problemet eksistere der som sagt ikke, hvis man får scriptet til at skrive billedet til et andet sted på serveren, men kun hvis det loades direkte. (altså at scriptet bliver til et billede, fremfor at scriptet generere et billede der gemmes et sted på serveren).. Og det kan jeg ikke forstå. Det var så der jeg håbede at i kunne hjælpe. :-)
Avatar billede supermichael Nybegynder
05. december 2004 - 15:32 #19
Jeg kom lige til at se at jeg skrev at jeg hentede billedet pic.php?pic=08.jpg gennem et href.. Det er forkert jeg skriver <img src="pic.php?pic=08.jpg" alt="pic">
Avatar billede Six Nybegynder
05. december 2004 - 15:37 #20
når du udskriver thumben - kan du ikke bruge.

    header('Content-type: image/jpeg');
    echo imagejpeg($image_p, NULL, 10);
Jeg prøvede at gemme mit resultat - og det var halveret i størrelse(kb)

Så det virker ved mig ihvertfald.
Avatar billede supermichael Nybegynder
05. december 2004 - 16:29 #21
Jeg forstår ikke rigtigt hvad du mener.. men du kan jo se mine scripts, og måske sige hvad jeg gør forkert..

Filen der viser billederne:

(filnavn = test.htm)
<html>
<head>
<title>Test</title>
</head>
<body>
<img src="pic2.php?pic=08.jpg" alt="her"/><br/><br/>
<img src="pic2.php?pic=04.jpg" alt="her"/><br/><br/>
</body>
</html>

Filen der skriver billedet:

(filnavn = pic.php)
<?php
if(!empty($_GET[pic])){
$filename = $_GET['pic'];
}
else{
$filename = 'nopic.jpg';
}
$percent = 50;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent / 100;
$new_height = $height * $percent / 100;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, null, 50);
?>

Prøv at se om du kan få et positivt resultat ud af disse scripts.
Avatar billede Six Nybegynder
05. december 2004 - 16:42 #22
det virker for mig det der ?

Jeg nedsætter kvaliteten på et billede og sætter størrelsen til 10 procent. Mit original billed fylder 4.513 bytes og når jeg har kørt scriptet på det fylder det 761 bytes.
Avatar billede supermichael Nybegynder
05. december 2004 - 16:45 #23
Ja men får du ikke stadig outputtet til at være et bmpbillede? Det gør jeg i hvert fald.
Desuden skal mine billeder kun forminskes til 40-50 procent, og ved den størrelse er det lige før bmp'en fylder mere end det originale jpeg billede
Avatar billede Six Nybegynder
05. december 2004 - 16:46 #24
Jeg får ikke et bmp output. - har du gdlib på din server ?
Avatar billede supermichael Nybegynder
05. december 2004 - 16:57 #25
Ja det har jeg.. tror jeg.. jeg bruger whitehat..
Den skriver i hvert fald: GD Version  bundled (2.0.15 compatible), er det godt nok?
Avatar billede Six Nybegynder
05. december 2004 - 17:01 #26
hmm du kan vel se det med en

<?
phpinfo();
?>

i en php fil og ikke andet
så skal der gerne stå noget med gdlib et sted
Avatar billede supermichael Nybegynder
05. december 2004 - 17:09 #27
Der står i hvert fald noget med gd et sted.. Du kan da selv lige kigge engang:

http://odd.users.whitehat.dk/vis.php

(midlertidigt link)
Avatar billede Six Nybegynder
05. december 2004 - 17:13 #28
Ja ok, så er gd installeret :D

Så tror jeg ikke jeg kan se hvad problemet kan være mere.
Avatar billede supermichael Nybegynder
05. december 2004 - 17:16 #29
Nej.. det er også ligemeget.. Jeg tror bare jeg bruger princippet i dit scrip, med at gemme thump-filen et sted på serveren, og så linke til det. det ved jeg i hvert fald at der virker.. Kan du ikke lige poste et svar?
Avatar billede Six Nybegynder
05. december 2004 - 17:19 #30
Jeg poster svar.

Jeg tror i princippet også at den anden løsning er tidskrævende i forhold til at ligge en thumb på serveren. Med din løsning skal serveren lave thumbs HVER gang en kigger på siden. Hvorimod den kun skal gøre det EN gang pr billed hvis du ligger det på serveren.
Avatar billede Six Nybegynder
05. december 2004 - 17:22 #31
Som lovet poster jeg lige scriptet.

uploadpic.htm
----------------
<form method="post" action="resize.php" enctype="multipart/form-data">
<p>Vælg et Billed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Procent: 0.5 for 50%<br>
<input type="file" name="navn[]" size="30">
<input type="text" name="scale" size="9">
<p>
<input name="upload" type="submit" value="Upload">
</form>

resize.php
---------------------
<?php

/*-----------------------
#        Konfiguration        #
-----------------------*/
$konfiguration["filtyper"] = ".jpg$"; //Skal adskilles med | eksempel: $filtyper = ".jpg$|.gif$";
$konfiguration["upload_bibliotek"] = "./pictures"; // Relativ sti, i forhold til denne fils placering. Eksempel: Upload.php ligger i /upload/ og filerne skal ligges i /upload/updir/ Så angives det ./updir HUSK AT MAPPEN SKAL HAVE CHMOD 777!
$konfiguration["thumb_bibliotek"] = "./thumbs"; // Relativ sti, i forhold til denne fils placering. Eksempel: Upload.php ligger i /upload/ og filerne skal ligges i /upload/thumbs/ Så angives det ./thumbs HUSK AT MAPPEN SKAL HAVE CHMOD 777!
$konfiguration["max_stoerrelse"] = "512000"; // Filens maxstørrelse i bytes - I konfigurationsfilen til php, er standard værdien 2mb. Dvs man kan max uploade en fil på 2 mb.
$konfiguration["$maxantalfiler"] = "15"; // Maks antal filer der kan uploades på én gang PS!!! BLIVER IKKE BRUGT ENDNU :D
/*-----------------------
#        Slut på konf        #
-----------------------*/

/*-----------------------
#        Funktioner          #
-----------------------*/
function upload($fra, $til) {
  move_uploaded_file($fra, $til);
};

function type($filtyper, $navn) {
    $ext = substr($navn, -3);
    if(!eregi($filtyper, $navn)) {
        echo "Filer af typen " .$ext. " er ikke tilladt.<br /> Tilladte typer er: " . str_replace("|", " ", str_replace("$", "", $filtyper));
        return false;
        };
    return true;
};

function checksize($size, $maxsize, $name) {
    if($size > $maxsize) {
        echo "<b>IKKE UPLOADET!</b> - $name er for stor.
        Der accepteres kun " . round($maxsize/1024, 1) . "kb, og din fil fylder "
        . round($size/1024, 1) . "kb <br>";
        return false;
    };
    return true;
};

/*-----------------------
#    Slut på Funktioner  #
-----------------------*/


$filnavn = $_FILES["navn"]["name"][0];
$filnavn_tmp = $_FILES["navn"]["tmp_name"][0];

$fra = $_FILES["navn"]["tmp_name"][0];
$til = $konfiguration["thumb_bibliotek"]."/".$_FILES["navn"]["name"][0];
$orgtil = $konfiguration["upload_bibliotek"]."/".$_FILES["navn"]["name"][0];
$size = $_FILES["navn"]["size"][0];
$maxsize = $konfiguration["max_stoerrelse"];

if (type($konfiguration["filtyper"], $filnavn) == "true" && checksize($size, $maxsize, $filnavn) == "true") {
   
    $percent = $_REQUEST["scale"];
   
    list($width, $height) = getimagesize($filnavn_tmp);
    $new_width = $width * $percent;
    $new_height = $height * $percent;
    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($filnavn_tmp);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    // Output
   
    //Filnavnet ændres til $filnavn + _thumb.jpg eksempel: Erik.jpg bliver til Erik_thumb.jpg
    $til = str_replace(substr($til, -4), "_thumb" . substr($til, -4), $til);
    imagejpeg($image_p, NULL, 10);
    imagejpeg($image, $orgtil, 100);
    echo $filnavn . " er gemt!";
};

?>
Avatar billede supermichael Nybegynder
05. december 2004 - 17:22 #32
Ja.. men jeg blev så nysgærrig.. kunne ikke gøre for det.. jeg havde besluttet mig for den løsning, og så VILLE jeg bare finde ud af det :D Kan ikke gøre for det. Jeg tror det er en sygdom!
Avatar billede Six Nybegynder
05. december 2004 - 17:23 #33
hehe det er vel et godt drive at have :D
Avatar billede supermichael Nybegynder
05. december 2004 - 17:24 #34
Ja det er det vel.. Tak for hjælpen alle sammen.. og fjappe :)
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