Tôi muốn hiển thị hình ảnh librsvg hoạt động trên máy Mac để tăng tốc độ hiển thị SVG. Câu trả lời tuyệt vời của Ian Mackinnon có tất cả các thành phần nhưng việc thực hiện thay đổi đối với thư viện là khó khăn. Các bước này đã làm cho librsvg hiển thị chính xác các hình ảnh được liên kết với các đường dẫn tương đối. Tôi hy vọng điều này giúp tiết kiệm thời gian.
Trước tiên, tôi cài đặt librsvg sử dụng:
brew install --build-from-source librsvg
Tại thời điểm viết bài, điều này cài đặt phiên bản 2.40.13 và các thư viện cần thiết để xây dựng nó.sau đó tôi đã tải về và giải nén tập tin nguồn vào thư mục chính của tôi:
wget https://download.gnome.org/sources/librsvg/2.40/librsvg-2.40.13.tar.xz
tar jxvf librsvg-2.40.13.tar.xz
cd librsvg-2.40.13
Tôi chỉnh sửa các _rsvg_handle_allow_load
chức năng trong rsvg-base.c
trong thư mục này để vượt qua những hạn chế con đường tải bằng cách thêm mã này xung quanh dòng 2275:
2275
2276 goto allow; // Just try and load it!
2277
Tôi cũng cần chỉnh sửa hàm rsvg_cairo_surface_new_from_href
trong rsvg-image.c
và dừng tải bằng các loại mime - chỉ cần thay thế chức năng như sau:
55 if (mime_type) {
56 // loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, error); // This doesn't work on my mac
57 loader = gdk_pixbuf_loader_new(); // This works
58 } else {
59 loader = gdk_pixbuf_loader_new();
60 }
tôi cần phải sử dụng các lệnh này sửa đổi một chút để biên dịch và cài đặt các thư viện chỉnh sửa:
make clean
make install gdk_pixbuf_binarydir=/usr/local/Cellar/librsvg/2.40.13/lib/gdk-pixbuf-2.0/2.10.0/loaders gdk_pixbuf_moduledir=/usr/local/Cellar/librsvg/2.40.13/lib/gdk-pixbuf-2.0/2.10.0/loaders
Tùy thuộc vào hệ thống của bạn, bạn có thể cần phải thêm sudo để các lệnh trên.
Một khi điều này đã được thực hiện, tôi có thể làm cho các liên kết SVG tương đối bằng cách sử dụng công cụ dòng rsvg-convert
lệnh được cài đặt với librsvg:
rsvg-convert test.svg -o test.png
Tôi cũng đã có thể sử dụng ImageMagick để chuyển đổi SVGs với các liên kết hình ảnh liên quan đến PNG file nếu tôi cài đặt nó sau khi cài đặt librsvg theo cách này:
convert test.svg test.png
này sẽ cho phép bạn kiểm tra rsvg chức năng và hiệu suất - tôi thấy đó là 2-3x nhanh hơn so với Inkscape cho ứng dụng của tôi. Tôi khuyên bạn nên thay đổi mã thông minh hơn nếu bạn sử dụng mã này trong môi trường sản xuất.
Tôi có cùng một vấn đề. Đặt một url không hợp lệ (liên kết đến một tệp không tồn tại) cho thấy rsvg sẽ không xuất ra lỗi nếu nó không thể tìm thấy tệp. – molecular