[PHP & GD] GD maakt thumbnail, maar alles is zwart

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
Ik ben op dit moment (beter gezegd, de halve dag al) bezig aan een script dat plaatjes en thumbnails zo bewerkt dat ze het jatten van een site niet meer waard zijn...
Dus er komt een tekst zichtbaar op het plaatje te staan, nu bij het grote plaatje was dit in een paar regels gebeurt, maar eerst thumbnailen en dan een tekst erop zetten wilt niet echt lukken...
Mijn code tot nu toe :
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
63
64
65
66
67
68
69
70
$image ="/usr/local/psa/home/*****/****/httpdocs/members/img/pic/$thumb";

    if (file_exists($image)){ 
    $orgbestandsgrootte = filesize($image); 
    $bestandsgrootte = bestandsgrootte($orgbestandsgrootte); 
    $extensiecontrole = explode (".", $image); 
    $hoeveel = count($extensiecontrole); 
    $hoeveel--; 
    $extensie = $extensiecontrole[$hoeveel]; 
    }
    $orgbestandsnaam = explode("/", $image); 
    $hoeveelb = count($orgbestandsnaam); 
    $hoeveelb--; 
    $downloadarray = explode(".", $orgbestandsnaam[$hoeveelb]); 
    $downloadcount = count($downloadarray); 
    $downloadcount--; 
    $downloadextensie = $downloadarray[$downloadcount]; 
    $downloadcount--; 
    $downloadnaam = $downloadarray[$downloadcount]; 
    $download = $downloadnaam.$bestandsnaamtoevoegsel.".".$downloadextensie; 
     
     header("Content-type: image/jpeg"); 
     $plaatje = ImageCreateFromJPEG($image); 

        $W=0;
        $H=0;
        $S=.4;
        $T=0;
        $uit=getimagesize($image);
        $WI=$uit[0];
        $HI=$uit[1];
        if ((isset($T)) and (!$T==0)){
            if ($WI>$HI){
                $W=$T;
                $H=0;
            }        
            if ($HI>$WI){
                $H=$T;
                $W=0;
            }                
            $S=0;    
        }    
        if ((isset($S)) and (!$S==0)){         
            if ($S>4){
                $S=4;
            }        
            $W=$S*$WI; 
            $H=$S*$HI;    
        }     
        if ((!isset($H)) or ($H==0))    {
            $H=round($W/$WI*$HI);
        }        
        if ((!isset($W)) or ($W==0))    {
            $W=round($H/$HI*$WI);
        }        
        if ($W>3001){
            $W=200;
        }    
        if ($H>3001){
            $H=200;
        }
      
        $plaatje1 = ImageCreateTrueColor($W,$H);    
        ImageCopyResized($plaatje,$plaatje1,0,0,0,0,$W,$H,$WI,$HI);     
        $tekstkleur=ImageColorAllocate($plaatje1, 255, 255, 255);  
        $tekst="Op deze thumbnail rust copyright";
        imagestring ($plaatje1, 1, 5, 0, $tekst, $tekstkleur);
        ImageJPEG($plaatje1);      
        ImageDestroy($plaatje1); 
        ImageDestroy($plaatje);


Wie kan mij helpen dit vervelende stukje script te laten werken ?
Op dit moment is de output een zwart vlak met de juiste grote (v.d. thumbnail) met de tekst erop, maar zonder het plaatje wat gethumbnailt moet worden...
De variabele $thumb wordt vanuit een ander script gegeven met een
code:
1
[img]"<locatie>/image.php?thumb=<bestandsnaam.jpg>"[/img]


De bedoeling is dat het plaatje eerst naar 40% van de originele grote wordt verkleint en dat daarna de tekst wordt toegevoegd (die in alle gevallen WEL zal passen (denk ik ;)))

De GD versie is 2.06 (ofzo) met PHP 4.x (op hosting provider) :X 8)7

Tot mijn spijt heeft het script zijn netheid een beetje verloren toen ik random wat ideeen ging proberen... |:(

[ Voor 4% gewijzigd door Icheb op 18-12-2002 21:00 ]

sebsoft.nl


Acties:
  • 0 Henk 'm!

  • PieterJ
  • Registratie: Juli 2000
  • Laatst online: 12:46
Mijn thumbnail scriptje ziet er zo uit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<? 
header("Content-type: image/jpeg"); 
$foto_id = $_GET['ID'];
$src_img = ImageCreateFromjpeg($foto_id); 
$ratio   = ImageSY($src_img) / ImageSX($src_img);
$new_w   = 350; 
$new_h   = round($ratio*$new_w);
$dst_img = imagecreatetruecolor($new_w,$new_h); 

ImageCopyResized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img)); 

$tekstkleur=ImageColorAllocate($dst_img, 255, 255, 255);   
$tekst="Op deze thumbnail rust copyright"; 
imagestring ($dst_img, 1, 5, 0, $tekst, $tekstkleur); 

Imagejpeg($dst_img); 
Imagedestroy($dst_img);
Imagedestroy($src_img);
?>


Het idee erachter is hetzelfde. Jij hebt het alleen wat meer uitgewerkt. regels 12,13 en 14 zijn jouw copyright regels. Dit werkt bij mij zonder problemen. Ik krijg de copyright melding op mijn thumbnails. Probeer het dus eens met deze basis, en voeg dan de rest van je code weer toe.

Acties:
  • 0 Henk 'm!

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
Ok, tnx

Ik zal het morgen eens proberen, heb er nu eigenlijk ff geen zin meer in :X
Maar in ieder geval al bedankt voor de andere manier :D

sebsoft.nl


  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
Voor mensen die de oplossing willen weten en dit topic dmv de search hebben gevonden zal ik mijn oplossing nog even posten...
Ik heb de extra (vertragende) functionaliteit even uit mijn eigen script gehaald waardoor het thumbnailen nu in ongeveer evenveel regels als het voorbeeld boven mijn vorige reply staat...

Current code :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
If ($thumb) {


header("Content-type: image/jpeg");  
$foto_id = "/usr/local/psa/home/*****/****/httpdocs/members/img/pic/$thumb";
$src_img = ImageCreateFromjpeg($foto_id);  
$ratio   = ImageSY($src_img) / ImageSX($src_img); 
$new_w   = 180;  
$new_h   = round($ratio*$new_w); 
$dst_img = imagecreatetruecolor($new_w,$new_h);  

ImageCopyResized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img));  

$tekstkleur=ImageColorAllocate($dst_img, 255, 255, 255);    
$onder=round($new_h*0.95);
$tekst="Op deze thumbnail rust copyright";  
imagestring ($dst_img, 1, 5, $onder, $tekst, $tekstkleur);  

Imagejpeg($dst_img);  
Imagedestroy($dst_img); 
Imagedestroy($src_img);

Nu verschijnt de tekst ALTIJD in het plaatje en past het ook altijd omdat het plaatje anders door GD gestretched word tot het past :D (dit is in mijn script niet zo).
Door het round(); commando te gebruiken in combinatie met de nieuwe grote zorg ik ervoor dat het altijd zal passen...

Dit script is gemaakt met dank aan PieterJ :D

sebsoft.nl