Raphael Clip图像问题

时间:2012-07-12 13:18:22

标签: javascript image raphael crop

好的,所以我知道标题很模糊,但这是我更具体的问题。目前我正在努力避免使用PHP和SQL来存储我正在使用的裁剪工具中的数据点。裁剪工具为我提供了左上角(x,y)坐标和右下角(x,y)坐标,他们希望我将这些坐标提交给数据库,以便PHP制作漂亮的图片。

我找到了拉斐尔并注意到他们有一个剪辑工具,可以让你剪辑图像,它会显示剪辑的图像。我想要做的是拍摄剪裁的图像并用它填充拉斐尔圆圈。

var paper = Raphael(10, 50, 500, 400);

        var paperCenter_X = 500/2;
        var paperCenter_Y = 400/2;

        //var circle = paper.circle(50, 40, 60);
        var circle = paper.circle(paperCenter_X, paperCenter_Y, 100);

        circle.attr("stroke", "#000");
        var grabImage = document.getElementById("jelly");

        var src = grabImage.src;
        //alert(src);
        var img = paper.image(src, 10, 10, 800, 600);
            img.attr({"clip-rect":"0 0 100 150"});
        //var newImage = new Image();
        //newImage.src = img.src;
        alert(newImage.src);

        circle.attr({fill: 'url("'+img+'")'});

所以我评论的内容是我尝试过的东西,但是没有用。理想情况下,我想做的只是用img.attr填充圆圈({“clip-rect”:“0 0 100 150”});关于如何做到这一点的任何建议都会很棒。

2 个答案:

答案 0 :(得分:2)

我怀疑是否可以使用RaphaelJS,但直接使用SVG是可能的。

完成了SVG模式标记。

试试此代码

<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1"
     baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:ev="http://www.w3.org/2001/xml-events">
    <title>Text Pattern Fill Example</title>
    <defs>
        <pattern id="img1" patternUnits="userSpaceOnUse" width="600" height="450">
            <image xlink:href="http://lorempixel.com/600/500/" x="0" y="0"
                width="600" height="450" />
        </pattern>
    </defs>
    <path d="M5,50
             l0,100 l100,0 l0,-100 l-100,0
             M215,100
             a50,50 0 1 1 -100,0 50,50 0 1 1 100,0
             M265,50
             l50,100 l-100,0 l50,-100
             z"
          fill="url(#img1)" />    
</svg>

在这里演示 http://jsfiddle.net/5kJSa/

原始代码来自http://www.boogdesign.com/examples/svg/path-pattern-fill.svg

答案 1 :(得分:0)

另一个答案。

与原始代码的偏差很小。

我使用带圆角的rect而不是circle并使用了fill属性。

<img id="jelly" src="http://lorempixel.com/400/200/" style="display:none;" />

<script type="text/javascript">
    var paper = Raphael(10, 50, 500, 400);

        var paperCenter_X = 500/2;
        var paperCenter_Y = 400/2;

var grabImage = document.getElementById("jelly");
var src = grabImage.src;

paper.rect(0, 0, 200, 200, 600).attr({
    fill: "url("+src+")",
    "stroke-width": 2
});


// Commenting your original code.
/*
        //var circle = paper.circle(50, 40, 60);
        var circle = paper.circle(paperCenter_X, paperCenter_Y, 100);

        circle.attr("stroke", "#000");
        var grabImage = document.getElementById("jelly");

        var src = grabImage.src;
        //alert(src);
        var img = paper.image(src, 10, 10, 800, 600);
            img.attr({"clip-rect":"0 0 100 150"});
        //var newImage = new Image();
        //newImage.src = img.src;
        alert(newImage.src);

circle.attr({fill: 'url("'+img+'")'});

*/

</script>
​

在这里查看小提琴http://jsfiddle.net/8XmqM/

代码的基本版本将如下所示

var paper = Raphael(10, 50, 500, 500);
paper.rect(0, 0, 200, 200, 600).attr({
    fill: "url(http://lorempixel.com/400/200/)",
    "stroke-width": 2
});​