2012-09-14 79 views
15

Tengo una imagen en .jpg format con white background color. Quiero eliminar el color de fondo blanco a transparente en Imagemagick. Intenté de muchas maneras pero aún así el fondo blanco no se puede eliminar. ¿Puede alguien ayudarme a resolver esto?Cómo reemplazar el color de fondo blanco con transparente de una imagen en ImageMagick?

+0

¿Qué intenta? Es posible que primero deba convertirlo al modo "color indexado" (por ejemplo, PNG). Independientemente de cómo lo haga, puede esperar que los artefactos aparezcan en el límite entre la imagen y el transparente. – msw

+0

Transparente a blanco: http://stackoverflow.com/questions/2322750/replace-transparency-in-png-images-with-white-background –

Respuesta

24

En primer lugar, es necesario convertir el formato de imagen de .jpg a .png formato JPEG, porque no soporta la transparencia. A continuación, utilice este comando:

convert image1.png -fuzz 20% -transparent white result.png

La opción -fuzz permite la desviación porcentaje especificado por el color blanco puro que se convierte en transparente también. Esto es útil, por ejemplo, cuando su imagen contiene ruido o gradientes sutiles.

+13

¿Qué estuvo mal con mi respuesta? (No dijo en su pregunta que necesitaba cierto grado de confusión, ni proporcionó un archivo de muestra, por lo que fue imposible adivinar ...) –

+6

No es necesario convertir los archivos * primero * de JPEG a PNG, y solo * luego * convertir blanco a transparente. Mi comando lo hace todo en * one * go. –

+2

@KurtPfeifle Entiendo que podría haberlo ayudado a mejorar su respuesta en lugar de contestar la suya; pero sin el '-fuzz 20%' no funcionó aquí; Creo que su respuesta podría mejorarse con la opción de fuzz por cierto, no veo absolutamente ningún problema al hacerlo; también su respuesta no es del todo correcta, ya que podría pasar directamente de un jpg a un resultado png; y al final, ambas respuestas presentan un problema serio; el color de fondo del contorno (que es negro aquí) se vuelve transparente; pero también todo negro dentro de la imagen real se vuelve transparente; lo que realmente estropeó mi imagen ...:> –

45

No puede tener colores de fondo transparentes en sus archivos JPEG. El formato de archivo JPEG no admite transparencia.

Si necesitas fondo transparente, es necesario convertir el JPEG a

  • ya sea PNG (alta calidad, tamaño del archivo, posiblemente más grande que JPEG)
  • o GIF (en caso de que puede tolerar baja calidad y una rango de un máximo de 255 colores).

Comando de ejemplo:

convert your.jpg -transparent white your.png 
+1

Debo haber leído su publicación, y no su comando real; pensé que estabas sugiriendo "convertir manualmente" lo siento por la confusión, voté tu respuesta. No estoy muy familiarizado con la sintaxis pero estoy con sus capacidades. – Jim22150

6

¡Acabo de encontrar una cosa muy buena!

magicwand 1,1 -t 20 -f image -r outside -m overlay -o 0 image.jpg imgOutput.png 

Es una escritura del golpe Fred Weinhaus que se pueden descargar desde here (para uso no comercial). ¡También hay alrededor de 250 guiones! ¡y este es asombroso! ¡hizo exactamente el truco, eliminar todo el fondo y mantener intactos los puntos de la imagen interior!

En esta página, hay varias imágenes como ejemplos para que pueda elegir lo que necesita para poner en la línea de comandos.

La posición inicial 1,1 es un adivinador general que dice que todo el contorno es de fondo.

Tener en cuenta que la salida debe ser ".png"

+0

totalmente sorprendente, ¡gracias! – dsummersl

1

Ésta es mi solución sin MagicWand (sustituir por magickconvert para im < 7.0):

magick img.png -fuzz 20% -fill none -draw "alpha 1x1 floodfill" result.png 
+1

en ubuntu imagemagick v8: 6.7.7.10 - error 'convert.im6: definición primitiva de dibujo no conforme 'alpha' @ error/draw.c/DrawImage/3158', ¿alguna idea? –

+0

Este es el comando correcto para imagemagick 6: convertir "./input.jpg" -fill none -draw 'color 1,1 floodfill' output.png –

Cuestiones relacionadas