2013-06-24 4 views
0

Мне нужно изображение, которое нужно разделить в браузере пользователей на 2 строки по горизонтали и по 2 строки по вертикали. Так что есть 9 частей, из которых состоит изображение.Нарисуйте 4 прямых изображения на изображении (наложение)

Либо это делается путем рисования линий, либо путем размещения 9 частей немного друг от друга.

Я знаю Raphael и paper.js, но, возможно, это можно сделать (canvas html5 и html4 JS) без дополнительных фреймворков.

Если у вас есть подход, можно было бы использовать его также, чтобы разделить круг на 4, как разделение торта?

+0

Да, конечно, вы можете. (1) установить фоновое изображение холста в качестве изображения (2) нарисовать линии, которые вам нужны на холсте. Peasy-легко. Проверьте некоторые ссылки на '' для использования. – enhzflep

ответ

2

Вы можете нарезать и пространство изображение врозь, используя холсту drawImage функцию

enter image description here

Всех работы выполняются с помощью функции context.drawImage, используя некоторые дополнительные параметры

drawImage способен подрезать часть исходного изображения и нарисовать его на холсте

BTW, drawImage также может одновременно масштабировать эту обрезанную часть.

Вот аргументы, чтобы позволить drawImage разрезать исходное изображение:

  1. Источник изображения
  2. X позиция на исходном изображении, где отсечение начнет
  3. Y позиции на исходном изображении, где отсечение начнет
  4. Ширина исходного изображения для клипа
  5. высоты исходного изображения для клипа
  6. Х положение на холсте, чтобы поместить обрезанное вспомогательное изображению
  7. Y положение на холсте, чтобы поместить обрезанный вспомогательное изображение
  8. масштабированной ширину подрезанных изображений, который можно сделать на холсте
  9. Масштабированных высоты отсеченное изображение, которое будет обращено на холсте

А вот как использовать DrawImage разрезать исходное изображение в 3x3 клетки с 10px расстояния

context.drawImage(

    img,    // the source image 
    0,0,    // get the image starting at it's 0,0 position 
    img.width,   // grab the entire width of the image 
    img.height   // grab the entire height of the image 
    x*img.width/3+10, // make 3 image "columns" with 10px spacing 
    x*img.height/3+10, // make 3 image "rows" with 10px spacing 
    img.width/3,  // each image column is 1/3 of the original image 
    img.height/3  // each image row is 1/3 of the original image 

); 

здесь Код и сценарий: http://jsfiddle.net/m1erickson/m89Gg/

<!doctype html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css --> 
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> 

<style> 
    body{ background-color: ivory; } 
    canvas{border:1px solid red;} 
</style> 

<script> 
$(function(){ 

    var canvas=document.getElementById("canvas"); 
    var ctx=canvas.getContext("2d"); 

    var image=new Image(); 
    image.onload=function(){ 
     slice(image); 
    } 
    image.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/sky-bg2.jpg"; 

    function slice(img){ 

     var canvas=document.getElementById("canvas"); 
     var ctx=canvas.getContext("2d"); 
     var w=img.width; // original image width 
     var h=img.height; // original image height 
     var rows=3;  // # of rows 
     var cols=3;  // # of columns 
     var cw=w/rows; // cell width 
     var ch=h/cols; // cell height 
     var scale=3;  // also, scale the image down 
     var spacing=5; // spacing between cells 

     // set the canvas width to accommodate 
     // sliced/space/scaled image 
     canvas.width=w/scale+spacing*2; 
     canvas.height=h/scale+spacing*2; 

     ctx.clearRect(0,0,canvas.width,canvas.height); 

     for(var y=0;y<3;y++){ 
      for (var x=0;x<3;x++){ 
       ctx.drawImage(img,x*cw,y*ch,cw,ch, 
        x*(cw/scale+spacing),y*(ch/scale+spacing),cw/scale,ch/scale) 
      } 
     } 
     ctx.stroke() 
    } 

}); // end $(function(){}); 
</script> 

</head> 
<body> 
    <canvas id="canvas" width=300 height=300></canvas> 
</body> 
</html> 
+0

+1 nice ......... – K3N

+0

это только для html5 без возврата для старых версий? – Email

+0

Работает в любом браузере, поддерживающем холст (на данный момент все основные браузеры поддерживают холст). Единственным унаследованным браузером без поддержки холста является IE <9, а прокладки доступны для игры более старого IE. :) – markE

Смежные вопросы