Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 18:57 Der er 34 kommentarer og
2 løsninger

PHP: find længste sidde i billede

Hvordan skriver jeg ind i følgende script at den længste side af billedet skal være 350 px?

<?
function resizeImage($src_file, $dest_file, $newWidth)
{
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL)
  return false;

// height/width
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];

$ratioWidth = $srcWidth/$newWidth;
$ratioHeight = 0;
$destWidth = $newWidth;
$destHeight = $srcHeight / $ratioWidth;
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor($destWidth,$destHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $destWidth,(int)$destHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
});
resizeImage("Images/7.jpg,Images/7-5.jpg,20");
?>
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:00 #1
Du kan finde ud af, hvilken side at billedet, der er længst, og så gøre den til 350px, derefter kan du tilpasse den anden side, så forholdet passer.
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:00 #2
Var det forståeligt? :)
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:02 #3
Udskift med denne:
function resizeImage($src_file, $dest_file, $newWidth = '350')
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:02 #4
Yeah I know, men denne kode er i forbindelse med at jeg uploader et billede. Derfor skal scriptet selv finde den længste side. Nu er spørgsmålet hvordan...?
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:03 #5
Hov. Her istedet:

resizeImage("Images/7.jpg,Images/7-5.jpg,350");

Bare glem det jeg skrev før
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:04 #6
fant0mas: tager den kode også højde for, hvis det nu er længden på billedet der er længst og generere den så længden som værende 350 px i stedet for bredden?
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:07 #7
Nej undskyld. Jeg sover.
Den klarer vi lige..
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:08 #8
Altså den måde, du finder den længste side, kan gøre med if:

if ($srcWidth > $srcHeight) {
// Her er bredden størst
}
elseif ($srcHeight > $srcWidth) {
// Her er højden størst
elseif ($srcHeight == $srcWidth) {
// Her er højde og bredde ens
}
else {
// Fejl, $srcHeight eller $srcWidth er nok ikke et tal
return false;
}
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:11 #9
Hmm, er det en kode, du selv har lavet? For i din funktion burde du nok ikke have $newWidth, da du her fortæller koden, at den skal gøre bredden af billedet til det, den modtager fra resizeImage()

Forstår jeg dig ret, vil du have scriptet til at ændre bredde og højde, så den længste side er maks 350 px
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:13 #10
tobias: yes præcis
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:13 #11
Ikke testet:

<?
function resizeImage($src_file, $dest_file, $newWidth, $newHeight)
{
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL)
  return false;

// height/width
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];


$wscale = $newWidth / $srcWidth;
$hscale = $newHeight / $srcHeight;
$scale = ( $hscale > $wscale ? $hscale : $wscale );
$nw = round( $srcWidth * $scale, 0 );
$nh = round( $srcHeight * $scale, 0 );
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor( $nw, $nh );
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $nw, $nh, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
};
resizeImage("Images/7.jpg,Images/7-5.jpg,350,350");
?>
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:18 #12
Men har man i dit script ikke allerede defineret at BÅDE højde og bredde skalvære 350 px?
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:26 #13
Jo de vil altid uanset størrelse blive max h/b 350.
Ellers:

<?
function resizeImage($src_file, $dest_file, $newWidth, $newHeight)
{
    $imginfo = @getimagesize($src_file);
    if ($imginfo == NULL)
    return false;

    // height/width
    $srcWidth = $imginfo[0];
    $srcHeight = $imginfo[1];


    $wscale = $newWidth / $srcWidth;
    $hscale = $newHeight / $srcHeight;
    $scale = ( $hscale > $wscale ? $hscale : $wscale );
    $nw = round( $srcWidth * $scale, 0 );
    $nh = round( $srcHeight * $scale, 0 );
   
    if($srcWidth < $newWidth && $srcHeight < $newHeight){
        $nw = $srcWidth;
        $nh = $srcHeight;       
    }
   
    $src_img = imagecreatefromjpeg($src_file);
    $dst_img = imagecreatetruecolor( $nw, $nh );
    ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $nw, $nh, $srcWidth, $srcHeight);
    imagejpeg($dst_img, $dest_file, 100);
    imagedestroy($src_img);
    imagedestroy($dst_img);
    return $dest_file;
};
resizeImage("Images/7.jpg,Images/7-5.jpg,350,350");
?>
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:26 #14
Dette burde kunne gøre det.
Og her er der taget højde for, at max-længden er 350, men billedet KAN være mindre, dvs. den ikke strækker et lille billede..

Dog er scriptet ikke testen

<?
function resizeImage($src_file, $dest_file, $newWidth)
{
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL)
  return false;

// height/width
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];

$ratioWidth = $srcWidth/$newWidth;
$ratioHeight = 0;
$destWidth = $newWidth;
$destHeight = $srcHeight / $ratioWidth;
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor($destWidth,$destHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $destWidth,(int)$destHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
});
resizeImage("Images/7.jpg,Images/7-5.jpg,20");
?>

<?
function resizeImage($src_file, $dest_file) {
$maxSize = 350;
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL) return false;
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
if (($srcWidth > $maxSize) || ($srcHeight > $maxSize)) {
  if ($srcWidth => $srcHeight) {
  $scale = $srcWidth/$maxSize;
  }
  elseif ($srcWidth < $srcHeight) {
  $scale = $srcHeight/$maxSize;
  }
  else {
  return false;
  }
}
$newWidth = round($srcWidth*$scale, 0);
$newHeight = round($srcHeight*$scale, 0);
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor($newWidth, $newHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
}
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:27 #15
Hov, der kom for meget med. Kig på dette bare:

<?
function resizeImage($src_file, $dest_file) {
$maxSize = 350;
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL) return false;
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
if (($srcWidth > $maxSize) || ($srcHeight > $maxSize)) {
  if ($srcWidth => $srcHeight) {
  $scale = $srcWidth/$maxSize;
  }
  elseif ($srcWidth < $srcHeight) {
  $scale = $srcHeight/$maxSize;
  }
  else {
  return false;
  }
}
$newWidth = round($srcWidth*$scale, 0);
$newHeight = round($srcHeight*$scale, 0);
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor($newWidth, $newHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
}
?>
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:31 #16
Efter rettelse af nogle fejl, virker dette:

<?
function resizeImage($src_file, $dest_file) {
$maxSize = 350;
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL) return false;
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
if (($srcWidth > $maxSize) || ($srcHeight > $maxSize)) {
  if ($srcWidth >= $srcHeight) {
  $scale = $srcWidth/$maxSize;
  }
  elseif ($srcWidth < $srcHeight) {
  $scale = $srcHeight/$maxSize;
  }
  else {
  return false;
  }
}
else {
  $scale = 1;
}
$newWidth = round($srcWidth/$scale, 0);
$newHeight = round($srcHeight/$scale, 0);
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor($newWidth, $newHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
}
?>
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:32 #17
tobias: den siger
Parse error: syntax error, unexpected T_DOUBLE_ARROW in /web/www/frac/users/j/jimages/try.php on line 9
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:35 #18
Fantomas: Den siger følgende ved dit script:

Warning: Missing argument 2 for resizeImage(), called in /web/www/frac/users/j/jimages/try.php on line 32 and defined in /web/www/frac/users/j/jimages/try.php on line 2

Warning: Missing argument 3 for resizeImage(), called in /web/www/frac/users/j/jimages/try.php on line 32 and defined in /web/www/frac/users/j/jimages/try.php on line 2

Warning: Missing argument 4 for resizeImage(), called in /web/www/frac/users/j/jimages/try.php on line 32 and defined in /web/www/frac/users/j/jimages/try.php on line 2
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:40 #19
Tobias: den siger
Warning: Missing argument 2 for resizeImage(), called in /web/www/frac/users/j/jimages/try.php on line 32 and defined in /web/www/frac/users/j/jimages/try.php on line 2 til din reviderede version
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:40 #20
resizeImage('Images/7.jpg','Images/7-5.jpg','350','350')

Prøv det
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:41 #21
Dette var hvad jeg kaldte funktionen: resizeImage("Images/21.jpg, Images/21-ggg.jpg");
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:42 #22
Hvad skriver du, når du kalder funktionen?

Du skal skrive resizeImage($tmp_img, $dest_img);

$tmp_img er billedestien fra det uploadede billede, det som sikkert ligger i Apaches tmp-mappe, som vist nok kan findes ved $_FILES["fil_navn"]["tmp"];
$dest_img er billedestien, hvor billedet skal gemmes, fx /web/www/frac/users/j/jimages/uplimg/billedenavn.jpg
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:43 #23
Fantomas: Den laver højden til at være 350 skønt det er længden der er længst..
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:43 #24
Altså man skal skrive gåseøjnene rundt om hvert argument, altså
resizeImage("Images/21.jpg", "Images/21-ggg.jpg");

og ikke
resizeImage("Images/21.jpg, Images/21-ggg.jpg");

kan du se forskellen? :)
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:45 #25
Hvis du iøvrigt skal bruge dette til thumps, behøver du ikke gemme billedet, men bare udskrive det. Er det ønsket, kan jeg nok godt flette lidt sammen hurtigt
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:47 #26
Tobias: Jeg indsatte hele dette script. Jeg indbygger den først i upload når jeg kan se den virker, derfor bruger jeg faste billedstier til afprøvning..

<?
function resizeImage($src_file, $dest_file) {
$maxSize = 350;
$imginfo = @getimagesize($src_file);
if ($imginfo == NULL) return false;
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
if (($srcWidth > $maxSize) || ($srcHeight > $maxSize)) {
  if ($srcWidth >= $srcHeight) {
  $scale = $srcWidth/$maxSize;
  }
  elseif ($srcWidth < $srcHeight) {
  $scale = $srcHeight/$maxSize;
  }
  else {
  return false;
  }
}
else {
  $scale = 1;
}
$newWidth = round($srcWidth/$scale, 0);
$newHeight = round($srcHeight/$scale, 0);
$src_img = imagecreatefromjpeg($src_file);
$dst_img = imagecreatetruecolor($newWidth, $newHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dest_file, 100);
imagedestroy($src_img);
imagedestroy($dst_img);
return $dest_file;
}
$tmp_img = "Images/7.jpg";
$dest_img = "Images/7-heyyyyyy.jpg";
resizeImage($tmp_img, $dest_img);
?>
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:48 #27
tobias_louv:
Der er jo ingen grund til at have en funktion, hvis du smadrer den som ved at fjerne mulighederne for at genbruge den til evt. at lave thumbs.
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:48 #28
Fantomas: i dit tilfælde, vil den så resize, hvis højde og bredde er lige store? Og hvad hvis billedet er under 350 på både højde og bredde, vil den så forstørre til 350?
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:50 #29
Hehe, fik ikke lige læst din sidste, altså der skal foretages en lille ændring, hvis den skal ikke skal "smadres":

<?
function resizeImage($src_file, $dest_file) {
$maxSize = 350;
$imginfo = @getimagesize($src_file);


skal ændres til

<?
function resizeImage($src_file, $dest_file, $maxSize) {
$imginfo = @getimagesize($src_file);


Og så skal man bare kalde den via: resizeImage("Images/21.jpg", "Images/21-ggg.jpg", 350);
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:51 #30
DET VIRKER! Tobias jeg tror det var dit script jeg fik til at virke, men jeg vil gerne give jer begge point fordi i var tålmodige og hjalp mig igennem!
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 19:52 #31
Det lyder helt fint med mig :-)

Det vigtigste er jo, det virker!! Så her får du et svar.
Fik du set den sidste ændring, altså den med, at du kan benytte resize lidt mere dynamisk? Det som Fantomas fik påpeget?
Avatar billede fant0mas Nybegynder
04. januar 2008 - 19:55 #32
Giv dem til tobias. God weekend :D
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:56 #33
Yes :-) Fantomas: Så mangler jeg bare et officielt "svar" fra dig også :-)
Hav en god aften
Avatar billede lasse-p3 Nybegynder
04. januar 2008 - 19:57 #34
Det var vist jer begge der gjorde det muligt så det er fair du, fantomas også får points ;-)
Avatar billede tobias_louv Nybegynder
04. januar 2008 - 21:06 #35
Når folk har sat sig i hovedet ikke at få points, er det svært at få dem til at poste et svar - faktisk umuligt..!

Men nu er du jo i den heldige situation, at du faktisk HAR et svar fra fant0mas.
Dvs. du kan godt dele pointsne, benyt dig af denne heldige mulighed!! ;)
(jeg ved godt, at lige netop dét svar er forkert, men fant0mas har dog svaret videre - så bare klø på)
Avatar billede lasse-p3 Nybegynder
05. januar 2008 - 12:30 #36
Tak for hjælpen gutter
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