Toon posts:

[PHP] Image Resize Script (vraagje over)

Pagina: 1
Acties:
  • 56 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik heb een leuk resize script hier ergens vandaan getoverd, waarvoor mijn dank :)

Nu zit ik alleen met een klein probleempje, waarvan ik denk ik de oplossing weet, maar geen flauw idee heb hoe dit te bouwen.

Het script & probleem kort omschreven

Hij resized een jpg naar een nieuw formaat, en vult eventuele 'gaten' op met color 0 om te voorkomen dat de ratio verklooid wordt. Dit werkt perfect, echter alleen wanneer de breedte -veel- groter is dan de hoogte, dan wordt het plaatje wel geresized, maar komt er slechts een gedeelte (center) van de breedte in de source.
Volgens mij is dit af te vangen door een 2e check op de breedte uit te voeren, en dan eventueel wat dingen te wijzigen. Ik heb echter geen flauw idee.

Kan iemand ff kijken naar me scrippie en suggesties doen ?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?
set_time_limit(0); // we don't want to timeout.

if ((isset($image)) && (is_uploaded_file($image)))
{ // resize the image

    if ($HTTP_POST_FILES['image']['type'] != "image/pjpeg")
        die($HTTP_POST_FILES['image']['type'] . " is not a supported file type");

    // Vars declareren
    $inputImg     = ImageCreateFromJPEG($image);
    $srcX         = imagesx($inputImg);
    $srcY         = imagesy($inputImg);
    $dstY         = 300; // fixed Y for the image. always the same
    $maxX         = 400; // max X for image, if image is smaller it will be centered
    $ratio        = ($srcY / $dstY);
    $dstX         = ($srcX / $ratio);
    $outputImg    = ImageCreateTrueColor($maxX, $dstY);
    $sm_dstY      = 112;
    $sm_maxX      = 150;
    $sm_ratio     = ($srcY / $sm_dstY);
    $sm_dstX      = ($srcX / $sm_ratio);
    $sm_outputImg = ImageCreateTrueColor($sm_maxX, $sm_dstY);
    imagefill($outputImg, 0, 0, ImageColorAllocate($outputImg, 255, 255, 255));
    imagefill($sm_outputImg, 0, 0, ImageColorAllocate($sm_outputImg, 255, 255, 255));

//  int imagecopyresampled ( resource dst_im, resource src_im,
//                           int dstX, int dstY, int srcX, int srcY,
//                           int dstW, int dstH,
//                           int srcW, int srcH);
// dst = Destination
// src = Source


    imagecopyresampled($outputImg, $inputImg,
                       (($maxX - $dstX) / 2),0,0,0,
                       $dstX, $dstY,
                       $srcX, $srcY);

    imagecopyresampled($sm_outputImg, $inputImg,
                       (($sm_maxX - $sm_dstX) / 2),0,0,0,
                       $sm_dstX, $sm_dstY,
                       $srcX, $srcY);

    header("content-type: image/jpeg");
    imagejpeg($outputImg, "images/large/" . $image_name);
    imagejpeg($sm_outputImg, "images/small/" . $image_name);
// Debug checking, view images on screen to see the new results.
    echo "[img]\"images/large/"[/img]<BR>";
    echo "[img]\"images/small/"[/img]<BR>";


}

else // print the form
{
    printf("<form enctype=\"multipart/form-data\" action=\"\" method=\"post\">");
    printf("Resize image: <input name=\"image\" type=\"file\">");
    printf("<input type=\"submit\" value=\"Submit Image\">");
    printf("</form>");
}
?>

Verwijderd

ik heb dit gedaan door het plaatje te verkleinen en of te vergroten naar de hand van een key.

ik kijk eerst hoe groot de ruimte is waar het plaatje moet komen, bijvoorbeeld:
$breedte = 200;
$hoogte = 200;

dan deel je de werkelijke breedte en door de breedte en de werkelijke hoogte door de hoogte. Daar pak je de kleinste van en die gebruik je als vergroot / verklein key. Zo trekt hij de afbeelding niet uit zijn fatsoen, ik heb de code hier nog wel ergens ik zal even voor je kijken. Het enige nadeel is dat hij de afbeelding anders weergeeft en niet werkelijk verkleint.

Verwijderd

aanroep:
PHP:
1
2
3
<?
    $grote=breed_hoog("afbeelding",249,199);
?>

code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function breed_hoog($bron,$breed,$hoog)
{

    //variablen
    //  $breed  = 249;
    //  $hoog   = 199;
    
    $picsize=getimagesize("$bron"); 
    $source_x = $picsize[0]; 
    $source_y = $picsize[1]; 


    //verkleinen over de lengte of breedte?
    if (($source_x/$breed)>($source_y/$hoog))
    {
        //verkleinen over de breedte
        $sleutel=$source_x/$breed;
    }
    else
    {
        //verkleinen over de hoogte
        $sleutel=$source_y/$hoog;
    }   
    //echo $sleutel;
    
    $x      = $source_x/$sleutel;
    $y      = $source_y/$sleutel;
    $return = "width='$x' height='$y'";
    return ($return);
}

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

link naar FAQ (scriptrequest).
quickstart.

[ Voor 5% gewijzigd door dusty op 16-04-2003 13:44 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Dit topic is gesloten.