Suponga que tiene cualquier imagen (PNG o JPG). Esta imagen tiene un fondo blanco y necesito que este fondo sea transparente.
Lo he probado con estos ejemplos:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
pero sin resultados deseables.
¿Cómo puedo hacerlo?
IMPORTANTE: usando convert
la línea de comandos.
png
imagemagick
alpha-transparency
Israel
fuente
fuente
convert original.png -transparent white new.png
pero al intentarlo, no puedo hacer que funcione. Aparte, ¿está seguro de que su fondo es realmente blanco (#FFFFFF), o es casi blanco (por ejemplo, #FEFEFE)?Respuestas:
Estoy usando ImageMagick 6.6.9-7 en Ubuntu 12.04.
Lo que funcionó para mí fue lo siguiente:
Eso cambió todo el blanco en el test.png a transparente.
fuente
Yo tuve el mismo problema. En el que tengo que eliminar el fondo blanco del formato de imagen jpg / png usando ImageMagick.
Lo que funcionó para mí fue:
1) Convertir formato de imagen a png:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
fuente
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Solución
Explicación
Esto es más bien un poco más que los simples respuestas dadas anteriormente, pero da mucho mejores resultados: (1) La calidad se debe superior a alfa suavizado, y (2) solamente se elimina el fondo en lugar de un solo color. ("Fondo" se define como aproximadamente del mismo color que el píxel superior izquierdo, utilizando un relleno de inundación desde los bordes de la imagen).
Además, el canal alfa también se erosiona medio píxel para evitar halos. Por supuesto, las operaciones morfológicas de ImageMagick no funcionan (¿todavía?) A nivel de subpíxeles, por lo que pueden ver que estoy haciendo explotar el canal alfa al 200% antes de erosionarlo.
Comparación de resultados
Aquí hay una comparación del enfoque simple ("-fuzz 2% - blanco transparente") versus mi solución, cuando se ejecuta en el logotipo de ImageMagick . Aplané ambas imágenes transparentes sobre un fondo marrón para que las diferencias sean evidentes (haga clic para ver los originales).
Observe cómo la barba del mago ha desaparecido en el enfoque simple. Compare los bordes del asistente para ver cómo el alfa suavizado ayuda a que la figura se mezcle suavemente con el fondo.
Por supuesto, admito completamente que hay ocasiones en las que es posible que desee utilizar la solución más simple. (Por ejemplo: es mucho más fácil de recordar y si está convirtiendo a GIF, está limitado a alfa de 1 bit de todos modos).
script de shell mktrans
Dado que es poco probable que desee escribir este comando repetidamente, le recomiendo envolverlo en un script. Puede descargar un script de shell BASH de github que realiza mi solución sugerida. Se puede ejecutar en varios archivos en un directorio e incluye comentarios útiles en caso de que desee modificar las cosas.
script bg_removal
Por cierto, ImageMagick en realidad viene con un script llamado "bg_removal" que usa floodfill de manera similar a mi solución. Sin embargo, los resultados no son excelentes porque todavía usa alfa de 1 bit. Además, el script bg_removal se ejecuta más lento y es un poco más complicado de usar (requiere que especifique dos valores de fuzz diferentes). Aquí hay un ejemplo de la salida de bg_removal.
fuente
gimp
o lo que sea. :)Esto funciona para mi:
donde cuanto menor es el% de fuzz, más cerca del blanco verdadero o, por el contrario, cuanto mayor es el%, más variación del blanco se permite que se vuelva transparente
fuente
mktrans
script de shell: github.com/hackerb9/mktransPuede usar esto para hacer que el fondo sea transparente
Lo anterior le da al prefecto un fondo transparente.
fuente
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
Usando ImageMagick, esto es muy similar al código y resultado de hackerb9, pero es una línea de comando un poco más simple. Supone que el píxel superior izquierdo es el color de fondo. Simplemente relleno el fondo con transparencia, luego selecciono el canal alfa y lo desenfoco y elimino la mitad del área borrosa usando -level 50x100%. Luego vuelva a encender todos los canales y aplánelo contra el color marrón. -Blur 0x1 -level 50x100% actúa para suavizar los límites de la transparencia del canal alfa. Puede ajustar el valor de fuzz, la cantidad de desenfoque y el valor de nivel 50% para cambiar el grado de suavizado.
fuente
Si desea controlar el nivel de transparencia, puede usar rgba. donde a es el alfa. 0 para transparente y 1 para opaco. Asegúrese de que el archivo de salida final debe tener la extensión .png para que sea transparente.
fuente
Sí. También tuve este mismo problema. Aquí está el comando que ejecuté y funcionó perfectamente:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
fuente