2011-11-15 2 views
0

У меня есть изображение на моем холсте в Рафаэле, и я использую clip-rect для обрезки деталей, которые мне не нужны. Теперь я создал svg с плагином raphael.serialize, но я не могу получить работу с клипом. Тхет часть из PHP скрипт, который перебираем созданный JSON:свойство clip-rect raphael для получения результата на сгенерированном изображении svg

for ($i=0; $i <= count($json); $i++) { 
      if ($json[$i]['type'] == "image") { 
       $base64 = base64_encode(file_get_contents($json[$i]['src'])); 
       $output .= '<image overflow="visible" x="'.$json[$i]["x"].'" y="'.$json[$i]["y"].'" width="'.$json[$i]["width"].'" clip-rect="'.$json[$i]["clip"].'" height="'.$json[$i]["height"].'" transform="'.$json[$i]["transform"].'" preserveAspectRatio="none" xlink:href="data:image/png;base64,'.$base64.'"></image>'; 
      } 
    } 

и здесь какая-то часть модифицированного плагина сериализации:

var object = { 
        type: node.type, 
        width: node.attrs['width'], 
        height: node.attrs['height'], 
        x: node.attrs['x'], 
        y: node.attrs['y'], 
        src: node.attrs['src'], 
        clip: node.attrs['clip-rect'], 
        transform: node.transformations ? node.transformations.join(' ') : '' 
       } 

я пытался использовать Viewbox = "» $ JSON [$ я]. ["clip"]. '"и clip ="'. $ json [$ i] ["clip"]. ", но я не получаю результата.

Как я могу заставить эту работу работать?

ответ

1

В SVG нет атрибута 'clip-rect'. Однако есть атрибут 'clip-path', который фактически используется Рафаэлем (клип-rect - это просто абстракция/ограничение). Обратите внимание, что вам потребуется сериализовать <clipPath>, который также определяет область отсечения.

+0

Я изменил свой PHP-скрипт, чтобы получить 'clip-path = ''. $ Json [$ i] [" clip-rect "]. '", Но я не могу получить результат. можете ли вы дать мне некоторые рекомендации по решению моей проблемы. Я новичок в svg – gerpaick

+0

Глядя на то, что raphael.serialize, похоже, не справляется с сериализацией клипов. Я не совсем уверен, почему автор этого расширения не просто использовал XMLSerializer на элементе svg toplevel, тогда вы получите все, что видит браузер. См. Http://stackoverflow.com/questions/227208/what-is-the-best-way-to-serialize-svg-from-the-client-dom/227754#227754 –

+0

спасибо, но я думаю, что он не работает IE-браузеры – gerpaick