Làm cách nào để chuyển đổi hình ảnh PNG sang SVG? [đóng cửa]


266

Làm cách nào để chuyển đổi hình ảnh PNG sang SVG?


21
Có lập trình hay không? Ngôn ngữ, nền tảng gì?
Michael Petrotta

Thông qua một số ứng dụng hoặc thông qua các lệnh hệ điều hành? Nếu thông qua hệ điều hành, bạn có thể vui lòng cho biết hệ điều hành nào không .. Cảm ơn
Mahesh Velaga

Câu trả lời:


130

Có một trang web nơi bạn có thể tải lên hình ảnh của mình và xem kết quả.

http://vectormagic.com/home

Nhưng nếu bạn muốn tải xuống hình ảnh của bạn, bạn cần phải đăng ký. (Nếu bạn đăng ký, bạn nhận được 2 hình ảnh miễn phí)


122

potracekhông không hỗ trợ PNG dưới dạng tập tin đầu vào, nhưng PNM .
Do đó, đầu tiên converttừ PNG đến PNM:

convert file.png file.pnm        # PNG to PNM
potrace file.pnm -s -o file.svg  # PNM to SVG

Giải thích các lựa chọn

  • potrace -s=> Tệp đầu ra là S VG
  • potrace -o file.svg => Ghi đầu ra vào file.svg

Thí dụ

Tệp đầu vào = 2017.png Tập tin đầu vào

convert 2017.png 2017.pnm

Tệp tạm thời = 2017.pnm

potrace 2017.pnm -s -o 2017.svg

Tập tin đầu ra = 2017.svg Tập tin đầu ra

Kịch bản

ykarikos đề xuất một tập lệnh png2svg.sh mà tôi đã cải thiện:

#!/bin/bash

File_png="${1?:Usage: $0 file.png}"

if [[ ! -s "$File_png" ]]; then
  echo >&2 "The first argument ($File_png)"
  echo >&2 "must be a file having a size greater than zero"
  ( set -x ; ls -s "$File_png" )
  exit 1
fi

File="${File_png%.*}"

convert "$File_png" "$File.pnm"        # PNG to PNM
potrace "$File.pnm" -s -o "$File.svg"  # PNM to SVG
rm "$File.pnm"                         # Remove PNM

Lệnh một dòng

Nếu bạn muốn chuyển đổi nhiều tệp, bạn cũng có thể sử dụng lệnh một dòng sau:

( set -x ; for f_png in *.png ; do f="${f_png%.png}" ; convert "$f_png" "$f.pnm" && potrace "$f.pnm" -s -o "$f.svg" ; done )

Xem thêm

Xem thêm so sánh tốt này của raster với bộ chuyển đổi vector trên Wikipedia.


2
Hình ảnh mất màu khi chuyển đổi từ pnm sang svg bằng cách sử dụng potrace. Có cách nào để giữ màu?
Coder

1
Xin chào @mundella. Tôi đã luôn luôn sử dụng potracecho các biểu tượng đen trắng. Cảm ơn phản hồi của bạn. Nhưng xin lỗi, không biết làm thế nào để giữ gìn màu sắc ... Ho! Tôi có một ý tưởng: Nếu hình ảnh gốc của bạn có ít màu (giả sử ba màu độc đáo), bạn có thể tạo ba hình ảnh ban đầu (một cho mỗi màu). Sau đó chuyển đổi sang SVG. Và cuối cùng, hợp nhất ba nội dung SVG trong một tệp (SVG dựa trên XML). Hy vọng điều này có thể giúp ... Chúc mừng ;-)
olibre

@olibre Có nền tảng nào thực dụng làm những điều tương tự không
Ami Kamboj

1
Xin chào @AmiKamboj. Tôi không chắc chắn để hiểu câu hỏi của bạn. Các lệnh convertpotracecó sẵn trên nhiều nền tảng. Tôi đang sử dụng máy tính dựa trên Linux. Tôi vừa mới sử dụng các lệnh này ngày hôm qua để tạo ra một SVG từ một tờ giấy được quét. Bạn có thể xem kết quả: cpp-frug.github.io/images/Cpp-President-2017.svg Vui lòng giải thích thêm về mục tiêu của bạn. Bạn muốn / tự hỏi điều gì? Nhu cầu / mong muốn của bạn là gì? Chúc mừng ;-)
olibre

1
Tôi đã sử dụng gần như mọi công cụ chuyển đổi x sang svg trực tuyến ngoài kia. Gói npm potrace thổi tất cả chúng ra khỏi nước. Thật tuyệt vời.
tsteve

59

Png là kiểu ảnh bitmap và SVG là thiết kế đồ họa dựa trên vectơ hỗ trợ bitmap, do đó, nó sẽ không chuyển đổi hình ảnh thành vectơ, chỉ là hình ảnh được nhúng trong định dạng dựa trên vectơ. Bạn có thể làm điều này bằng cách sử dụng http://www.inkscape.org/ miễn phí. Nó sẽ nhúng nó, tuy nhiên nó cũng có Live Trace like engine sẽ cố gắng chuyển đổi nó thành đường dẫn nếu bạn muốn (sử dụng potrace). Xem dấu vết trực tiếp trong adobe Illustrator (commericial) là một ví dụ:

http://graphicssoft.about.com/od/illustrator/ss/sflivetrace.htmlm


1
Tôi đã sử dụng dấu vết trực tiếp trong Inkscape để tạo lại các logo có bản gốc bị mất từ ​​lâu. Trừ khi phiên bản mới nhất đã thực hiện một số cải tiến, đó là một chút hit-or-miss. Phải nói rằng, tôi cũng đã theo dõi thủ công một số logo trong Inkscape và quản lý khá tốt.
AnonJr

12
Dưới đây là giải thích cách thực hiện điều này trong Inkscape: wiki.inkscape.org/wiki/index.php/Potrace
Erel Segal-Halevi

bình luận tuyệt vời. Chúng tôi đã nhận thấy rằng iOS 7.1 Safari sẽ không hiển thị hình ảnh được nhúng trong svg trong khi Chrome không gặp vấn đề gì với nó
problemsOfSumit

28

Bạn có thể muốn nhìn vào potrace .


1
Potrace này rất chính xác khi bạn biết cách sử dụng nó: nhưng nó không phải là nhiều màu 1.) chuyển đổi tệp của bạn thành BMP 2.) (đối với phần chính xác) chuyển đổi bmp thành độ phân giải cao (strech it) 3.) tô màu các hình dạng bạn muốn theo dõi màu đen 4.) chuyển đổi 5.) thay đổi chiều rộng và chiều cao thành bản gốc 6.) đánh giá cao việc theo dõi chính xác.
PauAI

18

Dễ dàng

  1. Tải xuống Inkscape (hoàn toàn miễn phí)
  2. Thực hiện theo các hướng dẫn trong video youtube ngắn này

Như bạn sẽ thấy, nếu bạn muốn thực hiện rất nhiều công cụ .svg thông minh khác, bạn cũng có thể thực hiện bằng Inkscape.

Một quan sát phi kỹ thuật: Cá nhân tôi thích phương pháp này hơn các dịch vụ trang web "miễn phí" bởi vì, ngoài việc thường xuyên yêu cầu đăng ký, bằng cách tải lên hình ảnh, trong tất cả các điều khoản thực tế, người ta sẽ đưa hình ảnh cho chủ sở hữu trang web.


1
Tại sao các downvote? Tôi sử dụng phương pháp này rất thành công. Ít nhất có phép lịch sự để giải thích lý do tại sao mọi người có thể hưởng lợi từ những hiểu biết của bạn.
Pancho

5
Làm theo các hướng dẫn đó chỉ bao bọc hình ảnh bằng SVG XML - nó không chuyển đổi bất cứ thứ gì thành dữ liệu đường dẫn.
Robert

@Robert - cảm ơn vì thông tin này, tôi đã không biết gì vì nó hoạt động tốt cho mục đích của tôi. Tuy nhiên, điều này không làm mất đi thực tế rằng Inkscape có thể thực hiện chuyển đổi PNG sang SVG hoàn chỉnh - và nhiều hơn nữa. Để minh họa cho bất cứ ai quan tâm, tôi đã sửa đổi câu trả lời của mình để bao gồm một video clip giải thích ngắn.
Pancho

Có thật vậy không? Tôi đã kiểm tra SVG được tạo và dường như nó có dữ liệu đường dẫn, không giống như phương thức cá di động ...
dario_ramos

Thỉnh thoảng có một số người hạ thấp điều này mà không có bất kỳ nguyên nhân chính đáng nào và tôi bắt đầu hình thành ý kiến ​​rằng nó độc hại. Nếu thực sự có một lý do - không có vấn đề gì, hãy ngừng lười biếng và thêm một số giá trị cho cộng đồng này bằng cách cung cấp nó.
Pancho

15

với họa sĩ minh họa adobe:

Mở Adobe Illustrator. Nhấp vào "Tệp" và chọn "Mở" để tải tệp .PNG vào chương trình. Chỉnh sửa hình ảnh khi cần trước khi lưu dưới dạng tệp .SVG. Nhấp vào "Tệp" và chọn "Lưu dưới dạng." Tạo một tên tệp mới hoặc sử dụng tên hiện có. Đảm bảo loại tệp đã chọn là SVG. Chọn một thư mục và nhấp vào "Lưu" để lưu tệp.

hoặc là

công cụ chuyển đổi trực tuyến http://image.online-convert.com/convert-to-svg

tôi thích AI vì bạn có thể thực hiện bất kỳ thay đổi nào cần thiết

chúc may mắn


3
+1 cho online-convert.com. Đã thử nó bây giờ với một vài hình bóng đơn sắc .. được thực hiện hoàn hảo .. Cũng có vẻ là hoàn toàn miễn phí.
nedR

Phải, một trong những người chuyển đổi tốt hơn ... Cảm ơn
JayD

1
Không nhận ra Illustrator đã nấu món này. Có tất cả mọi thứ như .ai, điều này sẽ giúp tôi tiết kiệm rất nhiều thời gian.
Doyle Lewis

10

Thật ngạc nhiên, potrace hóa ra, chỉ có thể xử lý đen trắng. Điều đó có thể tốt cho bạn sử dụng trường hợp, nhưng một số có thể coi việc thiếu dấu vết màu là có vấn đề.

Cá nhân tôi đã có kết quả khả quan với Vector Magic

Tuy nhiên, nó không hoàn hảo.


9

Một lưu ý cho những người sử dụng potraceImageMagick , chuyển đổi PNG hình ảnh với tính minh bạch để PPM dường như không làm việc rất tốt. Dưới đây là một ví dụ sử dụng -flattencờ trên convertđể xử lý việc này:

sudo apt-get install potrace imagemagick
convert -flatten input.png output.ppm
potrace -s output.ppm -o output.svg
rm output.ppm

Một hiện tượng thú vị khác là bạn có thể sử dụng PPM (256 * 3 màu, ví dụ: RGB), PGM (256 màu, tức là màu xám) hoặc PBM (chỉ có 2 màu, chỉ có màu trắng hoặc đen) làm định dạng đầu vào. Từ những quan sát hạn chế của tôi, có vẻ như trên các hình ảnh được khử răng cưa, PPMPGM (tạo ra các SVG giống hệt như tôi có thể nhìn thấy) thu nhỏ vùng màu và PBM mở rộng vùng màu (chỉ một chút). Có lẽ đây là sự khác biệt giữa một pixel > (256 / 2)bài kiểm tra và một pixel > 0bài kiểm tra. Bạn có thể chuyển đổi giữa ba bằng cách thay đổi phần mở rộng tập tin, tức là. PBM sử dụng sau đây :

sudo apt-get install potrace imagemagick
convert -flatten input.png output.pbm
potrace -s output.pbm -o output.svg
rm output.pbm

7

Bạn cũng có thể thử http://image.online-convert.com/convert-to-svg

Tôi luôn sử dụng nó cho nhu cầu của tôi.


Tôi thực sự làm việc như một sự quyến rũ ngay cả trong hình ảnh comlex. Tôi thực sự tư vấn công cụ này.
Atıfcan Ergin 7/1/2016

Thật không may cho tôi.
adamj

Không hoạt động tốt nếu hình ảnh có độ trong suốt
Genaut

Bạn không thể mong đợi kịch bản sẽ tự chụp ảnh và nhận được một SVG được xếp lớp hoàn hảo, kết quả là không có chuyện đó. Nếu bạn có một hình dạng đơn giản và bạn muốn có (các) đường dẫn, điều này sẽ làm điều đó. Tôi đã tạo ra rất nhiều biểu tượng phông chữ với trang đó và không bao giờ thất bại đối với tôi.
thednp

@thednp hình ảnh của tôi xuất hiện đen trắng
iOSAndroidWindowsMobileAppsDev

7

Tôi chỉ tìm thấy câu hỏi và câu trả lời này khi tôi đang cố gắng làm điều tương tự! Tôi không muốn sử dụng một số công cụ khác được đề cập. (Đừng muốn gửi email của tôi đi và không muốn trả tiền). Tôi thấy rằng Inkscape (v0.91) có thể làm một công việc khá tốt. Đây hướng dẫn là nhanh chóng và dễ hiểu.

Nó đơn giản như việc chọn bitmap của bạn trong Inkskape và Shift + Alt + B.

Phát hiện cạnh với công cụ bitmap Inksape Trace dựa trên potrace


4

Tùy thuộc vào lý do tại sao bạn muốn chuyển đổi từ .png sang .svg, bạn có thể không phải trải qua rắc rối. Chuyển đổi từ .png (raster) sang .svg (vector) có thể là một nỗi đau nếu bạn không quen thuộc với các công cụ có sẵn hoặc nếu bạn không phải là một nhà thiết kế đồ họa bằng thương mại.

Nếu ai đó gửi cho bạn một tệp lớn, độ phân giải cao (ví dụ 1024x1024), bạn có thể thay đổi kích thước đó xuống gần như bất kỳ kích thước nào bạn muốn trong GIMP. Thông thường, bạn sẽ gặp vấn đề khi thay đổi kích thước hình ảnh nếu độ phân giải (số pixel trên mỗi inch) quá thấp. Để khắc phục điều này trong GIMP, bạn có thể:

  1. File -> Open: tập tin .png của bạn
  2. Image -> Image Properties: kiểm tra Độ phân giải và không gian màu. Bạn muốn độ phân giải khoảng 300 ppi. Trong hầu hết các trường hợp, bạn muốn không gian màu là RGB.
  3. Image -> Mode: đặt thành RGB
  4. Image -> Scale Image: để kích thước một mình, đặt và độ phân giải Y thành 300 hoặc lớn hơn. Lượt quy mô.
  5. Image -> Scale Image: độ phân giải bây giờ phải là 300 và bây giờ bạn có thể thay đổi kích thước hình ảnh xuống gần như bất kỳ kích thước nào bạn muốn.

Không dễ như thay đổi kích thước tệp .svg, nhưng chắc chắn dễ dàng và nhanh hơn so với cố gắng chuyển đổi .png thành .svg, nếu bạn đã có một hình ảnh lớn, độ phân giải cao.


2

Tôi giả sử rằng bạn muốn viết phần mềm để làm điều này. Để làm điều đó một cách ngây thơ, bạn chỉ cần tìm các dòng và đặt các vectơ. Để làm điều đó một cách thông minh, bạn cố gắng khớp hình dạng vào bản vẽ (mô hình phù hợp). Ngoài ra, bạn nên cố gắng xác định các khu vực bitmap (các khu vực bạn không thể mô hình hóa thông qua sự xấu hổ hoặc áp dụng kết cấu. Tôi không khuyên bạn nên đi theo tuyến đường này vì sẽ mất khá nhiều thời gian và cần một chút kiến ​​thức về đồ họa và thị giác máy tính. Tuy nhiên, đầu ra sẽ nhiều và quy mô tốt hơn nhiều so với đầu ra ban đầu của bạn.



0

Công cụ này đang làm việc rất tốt ngay bây giờ.

http://www.mobilefish.com/service/image2svg/image2svg.php


17
Điều này nhúng hình ảnh trong svg, không phải đồ họa vector thực
Paul Gobée

Điều này đã chuyển đổi một trong những png màu của tôi trong đó các trình chuyển đổi trực tuyến khác không thể chuyển đổi đúng. Tôi nghĩ rằng nó đang hoạt động vì tôi có thể mở nó trong trình duyệt nhưng khi tôi thử mở nó trên một công cụ khác thì nó đã bị lỗi. Có lẽ vì nhận xét đã nêu ở trên.
vida

-1

Nếu bạn đang sử dụng một số hệ thống Linux, hình ảnh là hoàn hảo. I E

convert somefile.png somefile.svg

Điều này hoạt động với hàng đống các định dạng khác nhau.

Đối với các phương tiện khác như video và sử dụng âm thanh (ffmpeg), tôi biết bạn đã nêu rõ png cho svg, tuy nhiên; Nó vẫn liên quan đến truyền thông.

ffmpeg -i somefile.mp3 somefile.ogg

Chỉ là một mẹo cho nếu bạn muốn đi qua nhiều tệp; một vòng lặp sử dụng thủ thuật shell cơ bản ..

for f in *.jpg; do convert $f ${f%jpg}png; done

Điều đó loại bỏ jpg và thêm png cho biết chuyển đổi những gì bạn muốn.


2
Imagemagick hoạt động trên các nền tảng khác, không chỉ là 'Linux'.
Lunatik

25
Về mặt kỹ thuật này hoạt động, tuy nhiên, tệp svg được tạo không thực sự là đồ họa vector - nó chỉ chứa bitmap gốc "như hiện tại". Do đó, khi bạn phóng to nó, bạn vẫn nhận được chất lượng xuống cấp của hình ảnh raster.
Erel Segal-Halevi

7
@archeyDevil không, đó không phải là "chuyển đổi" thành SVG, đó là "nhúng" bitmap bên trong một SVG trống. Không sử dụng cho bất cứ ai.
Adam

4
@archeyDevil Tiêu đề câu hỏi là "chuyển đổi ... thành SVG". Câu trả lời của bạn không chuyển đổi. Nó nhúng. PNG là định dạng bitmap, SVG là định dạng vector. Sự khác biệt lớn. Nhúng là vô ích và không xứng đáng với một câu hỏi SO IMHO
Adam

3
Tôi biết nó không chuyển đổi. Tôi đã làm tuy nhiên; đăng bài này cho những người không cần một vectơ, nhưng chỉ cần một sự thay đổi nhanh chóng và bẩn thỉu giữa các kiểu.
DarkFox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.