Transparant wordt zwart bij resize .png bestanden

Pagina: 1
Acties:
  • 535 views

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • DePruus
  • Registratie: Januari 2017
  • Laatst online: 20-09 20:46
Ik heb een PHP-routine om alle bestanden in een directory, op een server, kan resizen. Het werkt bij jpg goed. Bij .png wordt de transparante laag zwart. Ik heb veel gelezen en aangepast, maar ik zie het licht niet. Wie wel...

Source:
<?php
//Maximize script execution time
ini_set('max_execution_time', 0);

//Initial settings, Just specify Source and Destination Image folder.
$ImagesDirectory = '../upload/'; //Source Image Directory End with Slash
$DestImagesDirectory = '../upload/'; //Destination Image Directory End with Slash
$NewImageWidth = 800; //New Width of Image
$NewImageHeight = 800; // New Height of Image
$Quality = 80; //Image Quality

//Open Source Image directory, loop through each Image and resize it.
if($dir = opendir($ImagesDirectory)){
while(($file = readdir($dir))!== false){

$imagePath = $ImagesDirectory.$file;
$destPath = $DestImagesDirectory.$file;
$checkValidImage = @getimagesize($imagePath);

if(file_exists($imagePath) && $checkValidImage) {
//Continue only if 2 given parameters are true{
//Image looks valid, resize.
if(resizeImage($imagePath,$destPath,$NewImageWidth,$NewImageHeight,$Quality))
{
echo $file.' resize Success!<br />';
/*
Now Image is resized, may be save information in database?
*/

}else{
echo $file.' resize Failed!<br />';
}
}
}
closedir($dir);
}

//Function that resizes image.
function resizeImage($SrcImage,$DestImage, $MaxWidth,$MaxHeight,$Quality)
{
list($iWidth,$iHeight,$type) = getimagesize($SrcImage);
$ImageScale = min($MaxWidth/$iWidth, $MaxHeight/$iHeight);
$NewWidth = ceil($ImageScale*$iWidth);
$NewHeight = ceil($ImageScale*$iHeight);
$NewCanves = imagecreatetruecolor($NewWidth, $NewHeight);

switch(strtolower(image_type_to_mime_type($type)))
{
case 'image/jpeg':
$NewImage = imagecreatefromjpeg($SrcImage);
break;
case 'image/png':
// integer representation of the color black (rgb: 0,0,0)
$background = imagecolorallocate($SrcImage, 255, 255, 255);
// removing the black from the placeholder
imagecolortransparent($SrcImage, $background);
// turning off alpha blending (to ensure alpha channel information is preserved, rather than removed (blending with the rest of the image in the form of black))
imagealphablending($SrcImage, false);
// turning on alpha channel information saving (to ensure the full range of transparency is preserved)
imagesavealpha($SrcImage, true);
$NewImage = imagecreatefrompng($SrcImage);
break;
case 'image/gif':
// integer representation of the color black (rgb: 0,0,0)
$background = imagecolorallocate($SrcImage, 255, 255, 255);
// removing the black from the placeholder
imagecolortransparent($SrcImage, $background);
$NewImage = imagecreatefromjpeg($SrcImage);
break;
default:
return false;
}

// Resize Image
if(imagecopyresampled($NewCanves, $NewImage,0, 0, 0, 0, $NewWidth, $NewHeight, $iWidth, $iHeight))
{
// copy file
if(imagejpeg($NewCanves,$DestImage,$Quality))
{
imagedestroy($NewCanves);
return true;
}
}
}

?>

Alle reacties


Acties:
  • 0 Henk 'm!

Verwijderd

Zet je code AUB even in code-tags - dat maakt het leesbaar... ;)

edit: als ik zoek op 'php png resize transparent background' dan kom een keur aan oplossingen tegen - werken die niet?

[ Voor 48% gewijzigd door Verwijderd op 13-06-2017 23:11 ]


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Je mist [code=php] tags om je code.

Verder mis je http://php.net/imagecolorallocatealpha

Kijk gerust eens naar mijn thumbnailImage() versie die het zelfde doet als http://php.net/manual/en/gmagick.thumbnailimage.php

[ Voor 38% gewijzigd door DJMaze op 13-06-2017 23:20 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Check mijn code
Kan iemand even...
Help, mijn script werkt niet (goed)
Kortom: dit is dus niet de bedoeling ;) Neem onze quickstart even door en open dan gerust een nieuw topic. Voor het posten van code hebben we code tags.

[ Voor 68% gewijzigd door RobIII op 14-06-2017 08:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.