Avatar billede oldnick Nybegynder
18. juli 2007 - 12:31 Der er 1 løsning

Upload script som bruger en function?

Hej

Nu har jeg efterhånden brugt en del timer på at få dette til at virker og jeg ved det er rimeligt simpelt, men jeg er lidt på bar bund i forhold til hvordan jeg skal sætte det sammen!

Jeg har fundet dette imageCrop script:

<?php
// The file
$filein = ''; // File in
$fileout = 'ttt.gif'; // Fileout - optional

$imagethumbsize_w = 100; // thumbnail size (area cropped in middle of image)
$imagethumbsize_h = 75; // thumbnail size (area cropped in middle of image)
resize_then_crop( $filein,$fileout,$imagethumbsize_w,
$imagethumbsize_h,/*rgb*/"255","255","255");

//Author Alan Reddan Silverarm Solutions
//Date 27/01/2005
//Function that works well with images.
//It takes the image and reduces its size to best fit. i.e If you have an image
//that is 200 X 100 and you want a thumbnail of 75 X 50,
//it first resizes the image to 100 X 50
//and then takes out a portion 75 X 50 from then center of the input image.
//So loads of image information is retained.
//The corollary also holds if your input image is 100 X 200
//it first resizes image to 75 X 150 and then takes out a
//portion 75 X 75 from the centre
// The advantage here is that function decides on whether
//resize is by width or height itself.
//it also decides whether to use the height or the width as the base start point
//in the case that athumbnail is rectangular

function resize_then_crop( $filein,$fileout,
$imagethumbsize_w,$imagethumbsize_h,$red,$green,$blue)
{

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

  if(preg_match("/.jpg/i", "$filein"))
  {
      $format = 'image/jpeg';
  }
  if (preg_match("/.gif/i", "$filein"))
  {
      $format = 'image/gif';
  }
  if(preg_match("/.png/i", "$filein"))
  {
      $format = 'image/png';
  }
 
      switch($format)
      {
          case 'image/jpeg':
          $image = imagecreatefromjpeg($filein);
          break;
          case 'image/gif';
          $image = imagecreatefromgif($filein);
          break;
          case 'image/png':
          $image = imagecreatefrompng($filein);
          break;
      }

$width = $imagethumbsize_w ;
$height = $imagethumbsize_h ;
list($width_orig, $height_orig) = getimagesize($filein);

if ($width_orig < $height_orig) {
  $height = ($imagethumbsize_w / $width_orig) * $height_orig;
} else {
    $width = ($imagethumbsize_h / $height_orig) * $width_orig;
}

if ($width < $imagethumbsize_w)
//if the width is smaller than supplied thumbnail size
{
$width = $imagethumbsize_w;
$height = ($imagethumbsize_w/ $width_orig) * $height_orig;;
}

if ($height < $imagethumbsize_h)
//if the height is smaller than supplied thumbnail size
{
$height = $imagethumbsize_h;
$width = ($imagethumbsize_h / $height_orig) * $width_orig;
}

$thumb = imagecreatetruecolor($width , $height);
$bgcolor = imagecolorallocate($thumb, $red, $green, $blue); 
ImageFilledRectangle($thumb, 0, 0, $width, $height, $bgcolor);
imagealphablending($thumb, true);

imagecopyresampled($thumb, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
$thumb2 = imagecreatetruecolor($imagethumbsize_w , $imagethumbsize_h);
// true color for best quality
$bgcolor = imagecolorallocate($thumb2, $red, $green, $blue); 
ImageFilledRectangle($thumb2, 0, 0,
$imagethumbsize_w , $imagethumbsize_h , $white);
imagealphablending($thumb2, true);

$w1 =($width/2) - ($imagethumbsize_w/2);
$h1 = ($height/2) - ($imagethumbsize_h/2);

imagecopyresampled($thumb2, $thumb, 0,0, $w1, $h1,
$imagethumbsize_w , $imagethumbsize_h ,$imagethumbsize_w, $imagethumbsize_h);

// Output
//header('Content-type: image/gif');
//imagegif($thumb); //output to browser first image when testing

if ($fileout !="")imagegif($thumb2, $fileout); //write to file
header('Content-type: image/gif');
imagegif($thumb2); //output to browser
}
?>

Det vil jeg så gerne bruge når jeg uploader et billede til mit webhotel. Og det er der hvor jeg ikke rigtigt kan få det til at hænge sammen.

$filein skal jo gerne komme fra min "FORM" og $filout skal jo ende som et croppet billede i en bestemt mappe på mit webhotel!

Jeg har prøvet at modificere en kode jeg bruger til et andet billede, hvor der er en function "resize" som navnet antyder bare resizer mit billede.

Her er den:

if($_FILES['userFile']['size'] > 0)
{
    $uploadfile = $thumbUploadDir . basename($_FILES['userFile']['name']);
 
    if($_FILES['userFile']['size'] > $maxSize)
    {
        echo "Dit billede er for stort, prøv med mindre...";
        exit();
    }
 
    $ext = strtolower(end(explode('.',$_FILES['userFile']['name'])));
 
    if(!in_array($ext,$pics))
    {
        echo "Forkert billede format, prøv med et andet...";
        exit();
    }

    if(! resize_then_crop( $_FILES['userFile']['tmp_name'], $uploadfile, $imagethumbsize_w, $imagethumbsize_h,/*rgb*/"255","255","255"))
    {
        echo "Det fejlede at resize billedet : " . $uploadfile . "! Prøv igen<br />";
    }
    else
    {   
        echo '<p>Billede 2 er nu sendt.</p>';
    }
}

Men det virker ikke den kom med denne fejl:

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /customers/madebymads.com/madebymads.com/httpd.www/inc/imageCropFunction.php on line 65
Det fejlede at resize billedet : pict/thumb/1.jpg! Prøv igen

Puha, det var langt, håber det er til at forstå og at der er nogen som kan hjælpe med at rette mit upload script til så det virker!

På forhånd tak, og hvis der skal flere point til, så finder vi ud af det!
Avatar billede oldnick Nybegynder
19. juli 2007 - 10:10 #1
Lukker
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