Ragazzi,
avevo un problema molto semplice:
avevo un'immagine, in cui gli unici due colori sono bianco e nero (non ESATTAMENTE bianco (255,255,255) e nero (0,0,0), ma colori molto vicini al bianco e al nero).
Volevo, in php, trasformare lo sfondo bianco in sfondo trasparente, ma ho capito che la funzione php imagecolortransparent può rendere trasparente un solo colore, nell'immagine, così mi sono detto:
1) prendo tutti i colori vicini al bianco
2) li rendo ESATTAMENTE bianchi (255,255,255)
3) converto il bianco in trasparente
sembrava facile, ma si è rivelato un inferno: ho capito che gli indici dei colori rimangono distinti anche se il colore è effettivamente uguale, cosi la funzione imagecolortransparent mi rendeva trasparente solo uno degli indici che conteneva il bianco, lasciando invariati gli altri.
Mi chiedo: è possibile che il php non metta a disposizione funzioni per la gestione (eliminazione, modifica, fusione non so....) degli indici di colore??
(alla fine ho risolto costringendo l'immagine ad avere massimo 8 colori diversi e trasformando il colore piùsimile al bianco in trasparente)
vi allego il codice attuale
Codice PHP:
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
// Ottengo i dati dell'immagine
$jpgData = $GLOBALS["HTTP_RAW_POST_DATA"];
// Salvo l'immagine in formato jpg (formato in cui mi è arrivata).
$jpgURL = "../vault/samplePicture.jpg";
$jpgFile = fopen($jpgURL,"w");
fwrite( $jpgFile, $GLOBALS['HTTP_RAW_POST_DATA']);
fclose($jpgFile);
// Apro l'immagine jpg
$imageObject = imagecreatefromjpeg($jpgURL);
// Costringo la palette ad avere massimo 8 indici di colore
imagetruecolortopalette($imageObject,false, 8);
// Converto il colore più simile al bianco in trasparente
$index = imagecolorclosest($imageObject, 255, 255, 255);
imagecolortransparent($imageObject, $index);
// Salvo l'immaigne in formato png
imagepng($imageObject, "../vault/samplePicture.png");
}