Toon posts:

[PHP]GD-Resize image zwart

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

Verwijderd

Topicstarter
Loop vast op mijn resizer, de breedte en hoogte van het nieuw gemaakte image kloppen wel, maar het plaatje wordt zwart. Uiteraard alle vars al nagekeken en geprint, ze kloppen allemaal...
Dus blanco image maken gaat goed, maar dan.. weet iemand wat ik verkeerd doe ?

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
<? 
class resize_image { 
## Variabelen 
var $sourcefile; 
var $sourcefile_id; 
var $sourcefile_width; 
var $sourcefile_height; 
var $newheight; 
var $newwidth; 
var $dst_img; 

    function set_sourcefile($sourcefile) 
         { 
         $this->sourcefile = $sourcefile; 
         
         } 
    function set_newheight($newheight) 
         { 
         $this->newheight = $newheight; 
         } 
    function resize() 
         { 
         $this->sourcefile_id = imageCreateFromJPEG($this->sourcefile); 
         $this->sourcefile_width = imagesx($this->sourcefile_id); 
         $this->sourcefile_height = imagesy($this->sourcefile_id); 
         $this->newwidth = floor(($this->newheight / $this->sourcefile_height) * $this->sourcefile_width); 
         //Blanco image maken met goede formaat 
         $this->dst_img = imagecreatetruecolor($this->newwidth,$this->newheight); 
         imagecopyresampled($this->dst_img,$this->sourcefile_id,0,0,0,0,$this->new_width,$this->new_height,$this->sourcefile_width,$this->sourcefile_height);    
         //Image opslaan 
         ImageJPEG($this->dst_img,"$this->sourcefile"); 
        //Geheugen op schonen 
        imagedestroy($this->dst_img); 
        imagedestroy($this->sourcefile_id); 
        }                 
} 
?> 

[ Voor 5% gewijzigd door Verwijderd op 19-05-2004 16:38 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Dit is mijn resize script, dat on the fly thumbnails maakt van plaatjes. Misschien kun je het aanpassen zodat het doet wat jij wil.
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
<?php

  define('MAX_IMAGE_SIZE', 96);
  
  $image = $_GET['file'];
  if (isset($_GET['size']))
    $maxsize = $_GET['size'];
  else
    $maxsize = MAX_IMAGE_SIZE;
  
  $width = $height = $maxsize;
  
  $imgInfo = getImageSize($image);
  
  if (($imgInfo[0] <= MAX_IMAGE_SIZE) and ($imgInfo[1] <= MAX_IMAGE_SIZE)) {
    $width  = $imgInfo[0];
    $height = $imgInfo[1];
    }
    else {
    if ($imgInfo[0] > $imgInfo[1])                      // Width > Height
      $height = round(($imgInfo[1]/$imgInfo[0]) * $maxsize);
    if ($imgInfo[0] < $imgInfo[1])                      // Width < Height
      $width = round(($imgInfo[0]/$imgInfo[1]) * $maxsize);
    }
  
  header("Content-type: image/jpeg");
  
  $background = imagecreatetruecolor($width, $height);
  switch ($imgInfo['mime']) {
        case 'image/jpeg': $foreground = imagecreatefromjpeg($_GET['file']); break;
        case 'image/png':  $foreground = imagecreatefrompng ($_GET['file']); break;
    case 'image/vnd.wap.wbmp': $foreground = imagecreatefromwbmp ($_GET['file']); break;
    }

  imagecopyresampled($background, $foreground, 0, 0, 0, 0, $width, $height, $imgInfo[0], $imgInfo[1]);
                                                                       
  imagejpeg($background);
  imagejpeg($foreground);
  
  imagedestroy($background);
  imagedestroy($foreground);
  
?>

De extreem rotte uitlijning komt door tabs en spaties die door elkaar gebruikt zijn (dankzij mijn editor), niet te veel op letten graag. :)

[ Voor 18% gewijzigd door NMe op 19-05-2004 16:32 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ja okay, thx voor je reactie.
On the fly thumbnailen doen ik ook, dat werk ook allemaal wel, maar dit is voor de website CMS.

Wat ik wil doen, is zorgen dat alle geuploade plaatjes (screenshots) dezelfde hoogte krijgen, 450, de breedte wordt dan zelf uitgerekend. Het lege image aanmaken is goed, de afmetingen kloppen precies... Maar het plaatje zelf is zwart.

De erop volgende class merged er een logo in, dat werkt dan weer wel.
Werkelijk alle andere mogelijke fncties geprobeer.

Heb het idee dat

imagejpeg($this->dst_img,$this->sourcefile);

Niet goed gaat op de een of andere manier. Aan de schrijf permissies ligt het niet,
kwaliteit parameter meegeven:

imagejpeg($this->dst_img,$this->sourcefile,100);

mag ook niet baten.

:'(

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Je kan mijn functie toch gebruiken en dan de file opslaan in plaats van afdrukken?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Mjah okay, maar eh wilde eigenlijk weten wat ik verkeerd doe.
ALs ik code schrijf maak ik die zelf, dan weet ik altijd excact waar ik mee bezig ben.

Naar mijn weten is mijn class ook volgens het boekje.
BTw. De server voldoet aan de eisen voor de code.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Vind ie het plaatje wel?
In .Net gaat het System.Drawing gedoe uit van een zwarte achtergrond. Misschien doet GD dat ook?

edit: hmm, mjah :)

- Ander plaatje geprobeerd?
- Ander type?

Anders weet ik het ook even niet (en gezien het feit ik de week af moet gaan sluiten >:)).

Klopt:
PHP:
1
ImageJPEG($this->dst_img,"$this->sourcefile");
dat wel?
Lijkt mij (zonder php kennis dan) dat dat:
PHP:
1
ImageJPEG($this->dst_img,$this->sourcefile);
moet worden.

[ Voor 72% gewijzigd door TeeDee op 19-05-2004 17:03 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Dat zeker wel, hij berekend immers de afmetingen van het "zwarte" plaatje.
Die kloppen ook.

Verwijderd

Topicstarter
OMG !

Ik schaam me diep (hehe)

$this->new_width (underscore moest ertussen uit).

CLass werkt zoals het hoort !

Mensen toch bedank, zal invervolg ook volgens het boekje debuggen,

error_reporting(E_ALL);

Zag metteen wat er loos was, schaam schaam

Verwijderd

Topicstarter
Wilde ff ter illustratie late nzien hoe ik de class heb toegepast...

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
<?
//Rename Uploaded File
$ext = strrchr($_FILES['screenshot']['name'], ".");
$newname = time();
$newname .= "$ext";
//uploaded file eerst opslaan..
move_uploaded_file($_FILES["screenshot"]["tmp_name"],"/usr/local/psa/home/vhosts/game-it.nl/httpdocs/screenshots/$_POST[id]/$newname");


//Resize uploaded file
include("../classes/resize.php");
$resize_image  = new resize_image;
$resize_image->set_sourcefile('../screenshots/'.$_POST['id'].'/'.$newname);
$resize_image->set_newheight('450');
$resize_image->resize();

//Merge logo into screenshot
include("../classes/merge_image.php");
$merge_image  = new merge_image;
$merge_image->set_sourcefile('../screenshots/'.$_POST['id'].'/'.$newname);
$merge_image->set_insertfile('../images/logo.jpeg');
$merge_image->set_pos('4');
$merge_image->set_transition('50');
$merge_image->mergePIX();
//einde merging

//redirect
include("../classes/redirect.php");
$redirect  = new redirect;
$redirect->set_url($_SERVER['PHP_SELF'].'?page=edit_game&id='.$_POST['id']);
$redirect->set_timeout('3000');
$redirect->print_redirect();
//einde redirect
echo 'Yup ! Logo in plaatje verwerkt..momentje PHP gaat je terug gooien waar je vandaan kwam...';
?>


:)

Verwijderd

* Schopje *

Dit is nou eens een handige klasse.

Ik heb hem maar even in gebruik genomen :)

Alleen, bij mij poept PHP nog steeds zwarte plaatjes uit. En jij zegt dat ie werkt?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Goed gezocht. ;)

Als je een concreet probleem hebt, open dan liever een nieuw topic waarin je eventueel verwijst naar deze. Daarmee vermijd je dat er in dit topic discussies worden aangegaan met mensen die hier misschien allang niet meer rondlopen. Anderhalf jaar is een lange tijd. ;)

Open dus liever even een nieuw topic met een concrete vraag en met precieze info over wat je al geprobeerd hebt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.