Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Transparante achtergrond thumbnail niet correct

Pagina: 1
Acties:

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
Ik ben bezig met een functie in PHP die afbeeldingen verkleint naar bepaalde dimensies. De bedoeling is dat ik een specifieke width / height combinatie opgeef en dan de afbeelding daarnaar verkleint. Als het nodig is wordt er ook en stuk vanaf geknipt zodat de thumbnail ook echt de dimensies krijgt die ik opgeef.

Echter, als er een afbeelding wordt toegevoegd die aan één of beide kant(en) kleiner is dan de thumbnail width / height, dan moet de rest van de ruimte opgevuld worden met een transparante laag.

Dat laatste gaat helaas fout. Ik test momenteel met een portret afbeelding. Mijn thumbnail dimensies zijn 100px bij 100px. De afbeelding zelf is 50px bij 100px (de width is dus kleiner dan de thumbnail width, aan beide kanten moet dus een transparante strook komen).

De code die ik nu heb zorgt er echter voor dat ik links wel een transparante laag krijg, maar rechts een zwarte (default) laag. Ik krijg het maar niet voor elkaar om dit ook transparant te maken. Hier houdt mijn php kennis echt op. De code die ik nu gebruik is als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Test afbeelding is JPG
$imgOriginal = @imagecreatefromjpeg( $source_image );

// Crop image to specified dimensions. Fill empty gap with transparancy
$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagesavealpha($newImage, true);

$cropStartX = ( $srcWidth / 2) - ( $newWidth / 2 );
$cropStartY = ( $srcHeight / 2) - ( $newHeight / 2 );

// Create the thumbnail
iimagecopyresampled($newImage, $imgOriginal, 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight, $newWidth, $newHeight);

// Add transparant layer
$transparancy = imagecolorallocatealpha($newImage, 0, 0, 0, 127);   
imagefill($newImage, 0, 0, $transparancy);

// Finally save image als PNG (for the transparancy layer)
imagepng($newImage, $destination_filename, 0);

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 12:41

TheNephilim

Wtfuzzle

Mis je imagealphablending() niet?

http://php.net/manual/en/function.imagesavealpha.php

Het is een hel om fatsoenlijk transparency toe te voegen in PHP-GD. Je zou zeggen dat het gewoon alleen die flag zetten is, maar er komt meer gezeur bij kijken. Wie weet kan ik nog een code sample vinden waar het werkt, maar nu geen tijd voor.

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Is het niet mogelijk om dit op een andere manier op te lossen? Het verschil tussen compressie met png en jpg is niet klein.

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 10:31
Volgens mij wel een veelvoorkomend probleem, deze dingen al geprobeerd? (1ste hit op google voor imagepng black background); http://stackoverflow.com/...imagepng-and-transparency

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
Dat is het! Imagecolortransparant deed de truc. Heb de imagefill functie ook weggehaald. Blijft vreemd natuurlijk, maar top dat het nu werkt! Tnx!

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450