Tengo algunas imágenes en html que tienen un fondo blanco. Necesito eliminar el fondo blanco. Estaba pensando que podía hacer transparentes todos los píxeles blancos, pero no sé cómo hacerlo. Solo me gustaría usar html/javascript.lienzo ImageData eliminar píxeles blancos
Respuesta
Aquí es cómo hacerlo ..
function white2transparent(img)
{
var c = document.createElement('canvas');
var w = img.width, h = img.height;
c.width = w;
c.height = h;
var ctx = c.getContext('2d');
ctx.drawImage(img, 0, 0, w, h);
var imageData = ctx.getImageData(0,0, w, h);
var pixel = imageData.data;
var r=0, g=1, b=2,a=3;
for (var p = 0; p<pixel.length; p+=4)
{
if (
pixel[p+r] == 255 &&
pixel[p+g] == 255 &&
pixel[p+b] == 255) // if white then change alpha to 0
{pixel[p+a] = 0;}
}
ctx.putImageData(imageData,0,0);
return c.toDataURL('image/png');
}
y utilizarlo establece la src
de una imagen para el valor devuelto de este método.
var someimage = document.getElementById('imageid');
someimage.src = white2transparent(someimage);
http://jsfiddle.net/gaby/UuCys/
Para que este código funcione, la imagen debe venir desde el mismo dominio que el código (por razones de seguridad ).
Bueno, los datos de imagen que obtienes de un objeto canvas con "getImageData" son solo información de píxeles RGBA, es decir, transparencia roja, verde, azul y alfa. De este modo, podría obtener los datos de la imagen y simplemente repetirlos, mirando cuatro píxeles a la vez. Cuando vea uno blanco, puede ponerlo en cero (junto con el valor alfa).
Lo que pasa es que no estará satisfecho con los resultados porque todavía habrá un "halo" alrededor de los elementos no blancos. La imagen original es (probablemente) ligeramente borrosa, efectivamente anti-alias, en los bordes de las áreas de color. Por lo tanto, hay píxeles a lo largo de los bordes que son un poco más claros que la imagen principal, y verá esos aún después de eliminar todos los blancos puros.
Para limpiar realmente los bordes es bastante complicado, dependiendo de qué tipo de imágenes fuente tienes exactamente. No creo que sea un procesamiento de imágenes de vanguardia ni nada por el estilo, pero no es trivial.
En lugar de usar un JPG, use un PNG con un fondo transparente alrededor de la imagen. Tendrás un mejor resultado.
Pero si quieres justo por encima de la propiedad imageData antes de dibujar hay una solución más corto :)
function clearData(imageData )
{
var d = imageData.data;
var L = d.length;
for (var i = 3; i < L; i += 4)
{
d[i] = 0;
}
}
- 1. JavaScript: obtener ImageData sin lienzo
- 2. PDF - Eliminar márgenes blancos
- 3. ¿Cómo escalar un imageData en el lienzo HTML?
- 4. ¿Establecer píxeles blancos en transparente en ImageMagick utilizando un umbral?
- 5. ¿Usando PIL para hacer transparentes todos los píxeles blancos?
- 6. cómo editar píxeles y eliminar fondo blanco en una imagen de lienzo en html5 y javascript
- 7. Canvas.drawBitmap() se ralentiza intermitentemente, causando flashes blancos
- 8. cómo detectar la región de gran cantidad de píxeles blancos usando opencv?
- 9. Cómo clonar ImageData?
- 10. escribiendo en IplImage imageData
- 11. Oracle trimspool solamente los blancos de cola (no blancos iniciales)
- 12. Lienzo de Android cambiar algunos píxeles de color
- 13. ¿Cómo puedo contar la cantidad de píxeles blancos en una imagen binaria con MATLAB?
- 14. Contar píxeles 'blancos' en la imagen binaria de opencv (de manera eficiente)
- 15. Eliminar 3 píxeles en iOS/WebKit textarea
- 16. JavaScript blancos regex caracteres
- 17. ¿Cómo puedo eliminar la altura extra del lienzo html5?
- 18. Javascript/jQuery: eliminar forma/ruta del lienzo
- 19. ¿Beneficios de pelar los espacios blancos posteriores?
- 20. Python/Django: ¿Cómo eliminar espacios y pestañas extra blancos de una cadena?
- 21. unidades de lienzo html5
- 22. putImageData() en lienzo girado trabajo incorrecto
- 23. ¿Por qué el lienzo de Tkinter solicita 4 píxeles adicionales para el ancho y la altura?
- 24. ¿Cómo traduzco correctamente las coordenadas de píxeles a las coordenadas del lienzo en Android?
- 25. HTML5 cómo dibujar la imagen de píxeles transparente en el lienzo
- 26. Traducir un lienzo html5
- 27. ¿Cómo deshacer, ocultar, eliminar o eliminar una imagen de un lienzo html?
- 28. ¿Cómo suprimir Javascript lienzo
- 29. PHP GD: ¿Cómo obtener imagedata como una cadena binaria?
- 30. How/Why is imagedata almacenado como char - OpenCV