Làm cách nào để tôi nhúng Google Web Fonts vào SVG?


48

Tôi đang viết một bài viết trên trang web của mình về những lợi thế của các công nghệ web mới, trong số các HTML5, CSS3 và SVG khác, một trong những lợi thế của cái sau là khả năng chọn văn bản trong hình ảnh có hiệu quả khác.

Tôi mới sử dụng SVG và vừa tạo ra đồ họa đẹp đầu tiên của mình trong Illustrator. Tôi đã nhúng nó vào một trang với tập lệnh GWF cho phông chữ Ubuntu trong thẻ. Hóa ra, phông chữ Ubuntu hiển thị chính xác trong văn bản thông thường, nhưng để thủ thuật này hoạt động trong SVG, tập lệnh Google phải được nhúng vào chính SVG. Tôi có thể làm cái này như thế nào?


1
Một lưu ý quan trọng liên quan đến các giải pháp dựa trên @import: chúng không hoạt động đối với ảnh nền. Bạn phải nhúng phông chữ qua base64 hoặc sử dụng thẻ hình ảnh / đối tượng thay thế.
Mickey

Câu trả lời:


39

Bạn nhúng phông chữ vào CSS bằng cách sử dụng mã hóa base64. Bạn có thể áp dụng các kiểu trong tài liệu SVG tương tự CSS bằng cách sử dụng một <style />phần tử. Vì vậy, nếu bạn có phông chữ WOFF, bạn sẽ nhúng nó như thế này:

<style>
@font-face {
    font-family: "Sample font";
    src: url("data:application/font-woff;charset=utf-8;base64,...");
}
</style>

Đâu ...là dữ liệu phông chữ được mã hóa base64.

Bạn có thể tìm thấy các ví dụ về điều này bằng cách xem biểu định kiểu của Typekit. Tôi không chắc loại mime font/woffcó đúng không, vì tôi cũng đã thấy mọi người cho rằng nó phải như vậy application/font-woff. Mặc dù font/woff, font/truetype, font/opentypevv dường như phổ biến hơn.

Ngoài ra, bạn thực sự có thể lấy phiên bản SVG của phông chữ web và nhúng đánh dấu mô tả của phông chữ SVG bên trong tài liệu của bạn (mặc dù hỗ trợ trình duyệt vẫn còn rất hạn chế như ghi chú của Luke trong các nhận xét).

Tuy nhiên, bạn cũng có thể liên kết với một phông chữ bên ngoài theo đặc điểm kỹ thuật của SVG . Đó dường như là giải pháp tốt nhất nếu bạn có nhiều tài liệu SVG tham chiếu phông chữ đó.


2
Hiện tại loại MIME chính xác cho .woff application/font-woff. stackoverflow.com/a/5142316/90674
sshow

3
Về "bạn thực sự có thể lấy phiên bản SVG của phông chữ web và nhúng đánh dấu mô tả phông chữ SVG bên trong tài liệu của bạn", bạn nên lưu ý rằng "Phông chữ SVG hiện chỉ được hỗ trợ trong Trình duyệt Safari và Android." Xem developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_fonts (cũng caniuse.com/#feat=svg-fonts )
Luke

1
Chủ đề này đã giúp rất nhiều, nhưng câu hỏi sau đó đã trở thành cách chuyển đổi phông chữ sang base64. Trang web này transfonter.org đã giúp rất nhiều và cho phép một người chỉ chọn một tập hợp con của phông chữ sẽ được chuyển đổi, để giảm kích thước tệp.
Fabien Snauwaert

Câu trả lời này có vẻ hấp dẫn, nhưng cuối cùng tôi thấy các bước này trở nên dễ dàng hơn, vì vậy tôi đã chia sẻ chúng: Graphicsdesign.stackexchange.com/a/124900/45239
Ryan

Khi tôi mở Svg đó trong adobe Illustrator, phông chữ không được tải. Có ai giúp đỡ không?
Aamir Nakhwa

13

Một <defs>phần như

<defs>
  <style type="text/css">@import url(http://fonts.googleapis.com/css?family=Indie+Flower);</style>
</defs>

làm.


13
Trong các trình duyệt web hiện tại (tháng 2 năm 2016), điều này chỉ hoạt động khi tải độc lập tệp SVG. Xem marians.github.io/test-webfonts-in-svg/test.svg để biết ví dụ. Mở cùng một SVG trong một trang HTML, phông chữ không được tải / kết xuất. Sử dụng marians.github.io/test-webfonts-in-svg làm ví dụ.
Marian

1
Cả trang SVG và HTML độc lập dường như hoạt động giống nhau trong Phiên bản Chrome 73.0.3683.103 (Bản dựng chính thức) (64-bit).
Paul Grime

Nó đang tải phông chữ khi tôi mở svg trên trình duyệt, nhưng khi tôi mở cùng một tệp svg trong Adobe Illustrator, thì nó không tải phông chữ. Có ai giúp đỡ không?
Aamir Nakhwa

3

Bạn có thể nhúng Google Web Fonts vào SVG của mình trực tiếp bằng Nano . Nó tự động quét SVG của bạn và chỉ nhúng có chọn lọc các phông chữ cần thiết, đảm bảo rằng phông chữ Ubuntu của bạn trông giống nhau trên tất cả các trình duyệt hiện đại. Trong trường hợp của tôi, tôi cần Roboto để được nhúng vào SVG của mình:

nhập mô tả hình ảnh ở đây

Tuyên bố miễn trừ trách nhiệm: Tôi cùng với đội ngũ đằng sau Nano, và chúng tôi cũng vậy, đã phải đối mặt với cùng một vấn đề trước đó do đó đã quyết định tự gãi ngứa bằng cách xây dựng Nano. Hy vọng điều này là hữu ích!

Chỉnh sửa: Đây là một lời giải thích nhanh về những gì xảy ra đằng sau hậu trường:

Để nhúng phông chữ trong SVG, trước tiên bạn phải biết họ phông chữ nào được sử dụng. Sau đó, bạn cần tìm các tập tin phông chữ và tải chúng. Sau khi tải về, bạn phải chuyển đổi chữ in nghiêng thông thường, in đậm, in nghiêng và in đậm sang mã hóa cơ sở 64. Nếu bạn đang thực hiện thủ công, thì đó là một khối lượng công việc khổng lồ, qua một số lượng lớn tệp, để biết tệp nào sử dụng đậm và tệp nào không. Sau đó, bạn phải sao chép tất cả 4 chuỗi mã hóa 64 cơ sở vào SVG của bạn.

Đó là lý do tại sao chúng tôi xây dựng Nano và đảm bảo nó quét SVG tự động và chỉ chèn các phông chữ đang được sử dụng. Ví dụ: nếu in đậm không được sử dụng hoặc nếu không có văn bản tồn tại, thì sẽ không có phông chữ nào được nhúng. Tất cả những gì bạn cần làm là kéo và thả SVG của bạn vào Nano và nó hoạt động như một bùa mê! Bạn có thể tìm hiểu thêm tại đây: https://vecta.io/blog/making-svg-easier-to-use


OK, có vẻ tốt. Thật không may, tải lên một trang Wordpress khá vui khi chấp nhận SVG trước giờ sẽ không "Xin lỗi, loại tệp này không được phép vì lý do bảo mật." - tôi cần phải đặt lại những gì để làm cho công việc này?
Chris Pink

1

Điều này có thể đơn giản hóa quá mức, nhưng bạn đã xem xét việc tải xuống phông chữ dưới dạng tệp zip từ google và sau đó để Illustrator chuyển đổi nó khi cần thiết thành đầu ra tệp SVG của bạn?

Đây chỉ là lý thuyết vì tôi chưa thử điều này, nhưng trên lý thuyết có vẻ hiệu quả.


0

Thêm vào sau <desc>thẻ sau

<defs>
<style type="text/css">@import url('http://fonts.googleapis.com/css?family=Lobster|Fontdiner+Swanky|Crafty+Girls|Pacifico|Satisfy|Gloria+Hallelujah|Bangers|Audiowide|Sacramento');</style>
</defs>

Tại sao bao gồm nhiều phông chữ google? Nó thậm chí không phải là tất cả trong số chúng hoặc được sử dụng nhiều nhất mà tôi thấy rất nhiều và sẽ thêm vào trọng lượng tổng thể của SVG.
MrMesees

Nó đang tải phông chữ khi tôi mở svg trên trình duyệt, nhưng khi tôi mở cùng một tệp svg trong Adobe Illustrator, thì nó không tải phông chữ. Có ai giúp đỡ không?
Aamir Nakhwa

0

CẬP NHẬT câu trả lời của tôi. Bây giờ tôi thích một câu trả lời khác trên trang này, đó là sử dụng Nano: https://gpsondesign.stackexchange.com/a/121950/45239

Giả sử bạn đã tải xuống và cài đặt phông chữ web trên hệ thống của mình và đã tạo một SVG (có thể sử dụng nhiều bước tương tự như tôi mô tả bên dưới nhưng không chọn "Phông chữ: Chuyển đổi thành phác thảo"), bạn có thể tải SVG lên Nano và xem tùy chọn "Nhúng phông chữ: Có" và nhấp vào Tải xuống.

Câu trả lời trước của tôi:

Nếu bạn sẵn sàng hy sinh việc có văn bản và SEO có thể lựa chọn:

  1. Tải về phông chữ web.
  2. Cài đặt nó cục bộ.
  3. Mở Adobe Illustrator
  4. Gõ văn bản của bạn.
  5. Tập tin> Xuất> Xuất dưới dạng
  6. Chọn ".SVG"
  7. Chọn các cài đặt sau:

    • Kiểu dáng: Phong cách nội tuyến
    • Phông chữ: Chuyển đổi thành Đề cương
    • Hình ảnh: Bảo tồn
    • ID đối tượng: Tên lớp
    • Số thập phân: 2
    • (đã bật) Giảm thiểu
    • (đã bật)
  8. Tùy chọn tải lên Svg kết quả lên https://vecta.io/nano (Nó có thể giảm kích thước tệp của tôi xuống 8.2%)


Thật không may, 'chuyển đổi thành phác thảo' không phải là một lựa chọn tuyệt vời cho kích thước văn bản nhỏ hơn.
Chris Pink

@ChrisPink, vâng, bạn đúng!, Hãy chia sẻ nếu bạn đã tìm thấy bất kỳ tùy chọn nào khác cho kích thước phông chữ nhỏ
Siêu mẫu

1
@SuperModel Tôi đã sử dụng Nano rất thành công, với các phông chữ chọn kiểu từ tài liệu kèm theo. Những nỗ lực đầu tiên của tôi đã thất bại nhưng với sự giúp đỡ tận tình của nhóm Nano, chúng tôi đã tìm ra một trường hợp đảm bảo tiêu đề SVG vẫn còn nguyên.
Chris Pink
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.