feat: curseur tolérance verre pour récupérer les zones semi-transparentes du détourage
Ajoute alphaThreshold (défaut 30) — les pixels dont l'alpha dépasse ce seuil sont rendus opaques avant la composition sur fond blanc, évitant que le verre ou les surfaces translucides soient supprimés par le modèle IA. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,8 +38,9 @@ export async function removeBackgroundRaw(
|
||||
* Composite un PNG transparent sur fond blanc avec feather optionnel.
|
||||
* @param pngBlob — PNG avec transparence (résultat de removeBackgroundRaw)
|
||||
* @param feather — récupération des bords en px (0 = strict, 5 = doux)
|
||||
* @param alphaThreshold — pixels avec alpha > seuil deviennent opaques (0 = désactivé, ex: 30 pour récupérer le verre)
|
||||
*/
|
||||
export function compositeOnWhite(pngBlob: Blob, feather: number): Promise<Blob> {
|
||||
export function compositeOnWhite(pngBlob: Blob, feather: number, alphaThreshold = 0): Promise<Blob> {
|
||||
const objectUrl = URL.createObjectURL(pngBlob)
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -55,6 +56,16 @@ export function compositeOnWhite(pngBlob: Blob, feather: number): Promise<Blob>
|
||||
|
||||
fgCtx.drawImage(img, 0, 0)
|
||||
|
||||
// Remonte les pixels semi-transparents (ex: verre) à pleine opacité
|
||||
if (alphaThreshold > 0) {
|
||||
const imageData = fgCtx.getImageData(0, 0, width, height)
|
||||
const data = imageData.data
|
||||
for (let i = 3; i < data.length; i += 4) {
|
||||
if (data[i] > alphaThreshold) data[i] = 255
|
||||
}
|
||||
fgCtx.putImageData(imageData, 0, 0)
|
||||
}
|
||||
|
||||
if (feather > 0) {
|
||||
fgCtx.globalCompositeOperation = 'destination-over'
|
||||
fgCtx.filter = `blur(${feather}px)`
|
||||
|
||||
Reference in New Issue
Block a user