ImageCopySampled in PHP - Problema alfa Premultaplicato
-
12-11-2019 - |
Domanda
Ho un problema con imagecopyresampled per buffer che utilizzano valori alfa. Apparentemente l'algoritmo premultaplica i pixel Valori alfa Prima del filtraggio, questo risulta in Black Borders Arround Objects.
Passi per riprodurre:
- .
-
Prendi un'immagine completamente bianca nella parte RGB e che ha un cerchio bianco (antialiasato !!) (vai con un cerchio, non con un quadrato!) su sfondo nero nella parte alfa (così il La parte alfa avrà pixel per lo più totalmente bianchi e totalmente neri, così come alcuni pixel di gradiente sui confini del cerchio a causa dell'antiliasing - questo significa che l'immagine di input non è premultalmente - è dritta / non amata, perché la parte RGB dell'immagine è completamente bianco).
-
Scaledown l'immagine di metà usando imageCopySampled
-
Componi il risultato su un'immagine completamente bianca
Cosa mi aspetto: Immagine completamente bianca
Cosa ottengo: Un confine grigiastro arround il contorno del cerchio
Sono abbastanza sicuro che ciò sia dovuto a algoritmo Premultalled all'interno dell'algoritmo Scaledown (l'algoritmo moltiplica il valore alfa pixel con il suo valore RGB per calcolare il nuovo valore RGB - quindi i pixel bianchi diventano grigi)
Qualcuno conosce un workerround per questo?
Soluzione
Suggerirei di provare l'immagine Magick per PHP.
http://www.php.net/manual/en/imagick.resizeImage.php
http://www.php.net/manual/en/imagick.scalaMage.php
Nella mia esperienza tutti i problemi riguardanti l'imaging in PHP vanno via.