2010-02-12 22 views
11

Tôi đang cố gắng mở rộng hình ảnh, sửa đổi hình ảnh và sau đó xuất sang định dạng hình ảnh khác. Cho đến nay, tôi đã sử dụng thư viện apache batik. Để chuyển đổi đơn giản, điều này thật dễ dàng. Để cắt svg, điều này rất dễ.Chia tỷ lệ SVG bằng Java

Tuy nhiên, tôi không thể tìm ra cách chia tỷ lệ thành hình ảnh đầy đủ do svg tạo ra. Đó là, tôi có thể xác định diện tích quan tâm như là một hình chữ nhật bounding, và sau đó mở rộng quy mô hoạt động trên hình chữ nhật bounding, nhưng tôi không biết làm thế nào để quy mô trên hình ảnh của svg.

Đây là những gì tôi có cho đến nay:

... 
//set the output width and height 
transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(newSize.width)); 
transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(newSize.height)); 

//set the aoi for scaling. Unsure what to do here. 
transcoder.addTranscodingHint(PNGTranscoder.KEY_AOI, new Rectangle(0, 0, 100, 100)); 
... 

Trả lời

7

Nếu bạn không đặt gợi ý KEY_AOI chuyển mã, sau đó các viewBox="" thuộc tính trên phần tử gốc <svg> sẽ được sử dụng để xác định các khu vực quan tâm. Nếu tài liệu bạn chuyển mã không có thuộc tính viewBox="" thì các thuộc tính width=""height="" sẽ được sử dụng, vì vậy AOI sẽ là (0, 0, chiều rộng, chiều cao).

Và nếu không có bộ nào trong số này được đặt và bạn không biết trước hệ thống tọa độ của tài liệu ở đâu, thì bạn có thể tính toán hộp giới hạn của phần tử gốc <svg> và sử dụng nó làm AOI. Bạn có thể thực hiện việc này trước tiên "booting the DOM" cho tài liệu của mình và sau đó gọi getBBox() trên phần tử tài liệu.

+0

Vì tôi sẽ xử lý nhiều hình ảnh SVG khác nhau, tôi có thể sẽ phải làm tất cả 3 trong số này. Cảm ơn đã phản ứng nhanh chóng. Tôi sẽ chấp nhận một khi tôi có thể kiểm tra điều này. –

+0

@heycam, hãy giúp tôi về câu hỏi này http://stackoverflow.com/questions/15286536/outofmemory-while-resizing-svg-file-using-apache-batik – Mihir