2017-04-21 52 views
7

有没有一种方法来调整xy坐标以适应对虾PDF中的边界框,如果它们大于框的高度?虾PDF线适合边界框

我使用宝石“签名垫轨”捕捉签名然后存储以下内容:

[{"lx":98,"ly":23,"mx":98,"my":22},{"lx":98,"ly":21,"mx":98,"my":23},{"lx":98,"ly":18,"mx":98,"my":21}, ... {"lx":405,"ly":68,"mx":403,"my":67},{"lx":406,"ly":69,"mx":405,"my":68}] 

我有如下,以显示我的PDF签名:

bounding_box([0, cursor], width: 540, height: 100) do 
     stroke_bounds 
     @witness_signature.each do |e| 
     stroke { line [e["lx"], 100 - e["ly"]], 
         [e["mx"], 100 - e["my"] ] } 
     end 
    end 

但是签名在某些情况下会跑离页面,并不是中心,只是一般地运行不佳。

+0

你能告诉你的电流输出的一个例子(图像)和另一个与所需的输出? – Gerry

回答

1

你的问题很模糊,所以我猜你的意思。

重新缩放坐标(x[i], y[i]), i = 1..n的序列,以适应尺寸(width, height)的给定边界框与原籍(0,0)如后记,首先决定是否以保持原始图像的高宽比。适合一个盒子通常不会那样做。既然你可能不想扭曲签名,说答案是“是的”。

当将图像缩放为保留长宽比的盒子时,x轴或y轴确定比例因子,除非该盒恰好具有图像的方面。接下来要决定如何处理替代轴上的“额外空间”。例如。如果图像比边界框高而薄,多余的空间将在x轴上;如果短而胖,那就是y轴。

让我们假设将图像置于额外的空间中;这似乎适合签名。

那么这里就是伪重规模的点,以适应框:

x_min = y_min = +infty, x_max = y_max = -infty 
for i in 1 to n 
    if x[i] < x_min, x_min = x[i] 
    if x[i] > x_max, x_max = x[i] 
    if y[i] < y_min, y_min = y[i] 
    if y[i] > y_max, y_max = y[i] 
end for 
dx = x_max - x_min 
dy = y_max - y_min 
x_scale = width/dx 
y_scale = height/dy 
if x_scale < y_scale then 
    // extra space is on the y-dimension 
    scale = x_scale 
    x_org = 0 
    y_org = 0.5 * (height - dy * scale) // equal top and bottom extra space 
else 
    // extra space is on the x_dimension 
    scale = y_scale 
    x_org = 0.5 * (width - dx * scale) // equal left and right extra space 
    y_org = 0 
end 
for i in 1 to n 
    x[i] = x_org + scale * (x[i] - x_min) 
    y[i] = y_org + scale * (y[i] - y_min) 
end