小编Tom*_*man的帖子

使用 Fabric JS 模拟位图字体的字距调整

我正在尝试使用 Fabric JS 创建一种效果,其中字母看起来像这样“绣”在毛衣上:

我可以通过使用这个动作在 Photoshop 中实现这种效果。

我把它变成 a 的想法<canvas>是从 Photoshop 中渲染出每个刺绣字母的 png。然后,我将根据用户键入的内容将每个字母放在画布上。

然而,这种方法不会有正确的字距调整。

为了解决这个问题,我试图用相同的字体在 Fabric 中写出文本,然后将每个刺绣的 png 覆盖在它正在替换的字母之上(然后隐藏文本本身)。

这是我呈现文本的方式:

window.chest_text = new fabric.IText("NYC", {
      fill: '#000',
      fontSize: 12,
      left: 210,
      top: 100,
      fontFamily: 'Graphik',
      fontWeight: 500,
      lineHeight: 1,
      originX: 'center',
    });
Run Code Online (Sandbox Code Playgroud)

然后这是我渲染刺绣字母的方式:

  var n_url = 'https://res.cloudinary.com/tricot/image/upload/v1598820746/tmp/n-embroidery-test.png'
  var y_url = 'https://res.cloudinary.com/tricot/image/upload/v1598820745/tmp/y-embroidery-test.png'
  var c_url = 'https://res.cloudinary.com/tricot/image/upload/v1598820745/tmp/c-embroidery-test.png'
  
  fabric.Image.fromURL(n_url, function(img) {
    img.set({
      left: Math.round(window.chest_text.aCoords.bl.x),
      top: window.chest_text.top
    })
    
    img.scaleToHeight(Math.floor(window.chest_text.__charBounds[0][0].height / 1.13), true)
    
    canvas.add(img);
  })
  
  fabric.Image.fromURL(y_url, function(img) {
    img.set({
      left: Math.round(window.chest_text.aCoords.bl.x …
Run Code Online (Sandbox Code Playgroud)

fonts canvas bitmap-fonts kerning fabricjs

6
推荐指数
1
解决办法
285
查看次数

Gmail如何识别电子邮件签名(或者,"识别电子邮件签名的最佳方式是什么?")

Gmail会自动显示看起来像签名的文字.任何人都有猜测它是如何做到这一点的?(我注意到它取决于发件人姓名的存在,但我认为这只是故事的一部分).

我问,因为我正在开发一个具有电子邮件界面的Web应用程序,我想在显示他们的电子邮件内容之前删除用户的签名.

email gmail parsing signature

5
推荐指数
1
解决办法
1390
查看次数

WYSIWYG富文本编辑器,支持差异?

我的Web应用程序类似于StackOverflow,因为不同的用户经常编辑相同的文本块.

目前我们只支持纯文本,因此很容易向用户显示文本在编辑之间的变化情况.

我想在这些字段中支持富文本,但我的用户是非技术性的,因此任何类型的标记都不是一种选择.

有没有支持差异的基于javascript的富文本编辑器?理想情况下,差异也是富文本格式,但如果需要,它们可以用降价或类似方式呈现(我想不惜一切代价避免使用原始HTML).

javascript diff richtextbox

5
推荐指数
0
解决办法
1414
查看次数

查找没有关联has_many对象的所有对象

在我的在线商店中,如果订单处于"已授权"状态并且尚未有任何关联的货件,则该订单已准备好发货.现在我这样做:

class Order < ActiveRecord::Base
    has_many :shipments, :dependent => :destroy

    def self.ready_to_ship
        unshipped_orders = Array.new
        Order.all(:conditions => 'state = "authorized"', :include => :shipments).each do |o|
            unshipped_orders << o if o.shipments.empty?
        end
        unshipped_orders
    end
end
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

activerecord ruby-on-rails associations

5
推荐指数
2
解决办法
4862
查看次数

使用will_paginate通过随机列出的博客文章进行分页

我想让用户能够以随机顺序浏览我的博客帖子.

我无法像这样实现它:

@posts = Post.paginate :page => params[:page], :order => 'RANDOM()'
Run Code Online (Sandbox Code Playgroud)

因为:order每个查询都会调用该参数,因此我冒着重复博客帖子的风险.

最好的方法是什么?

random ruby-on-rails will-paginate

5
推荐指数
1
解决办法
1078
查看次数


在Ruby中将整数转换为带符号的字符串

我有一份报告,其中列出了总值,然后是括号中的变化.例如:

歌曲:45(上周+10)

所以我想将整数10打印为"+10",将-10打印为"-10"

现在我正在做

(song_change >= 0 ? '+' : '') + song_change.to_s
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

ruby integer

5
推荐指数
1
解决办法
8078
查看次数

欺骗引用Google Analytics?

每当用户访问我的网站上的"Page A"时,我立即通过window.location使用Javascript 设置将其重定向到"Page B" ."页面A"没有对其进行Google Analytics跟踪 - 当有人从"页面A"重定向到"页面B"时,我想跟踪他,就像他通过"页面B"进入网站一样.不幸的是,我当前的设置会中断引荐来源信息,因为被重定向到"Page B"的人看起来像Google Analytics一样来自"Page A":

alt text http://dl.dropbox.com/u/2792776/screenshots/2010-05-06_1402.png

用户被重定向到"Page B"后,我想告诉Google Analytics他们的"真实"推荐人(即推荐者到"Page A").我怎样才能做到这一点?

(注意:我意识到使用真正的HTTP重定向而不是基于Javascript的重定向可以解决这个问题.不幸的是,这不是一个选项)

javascript redirect google-analytics

5
推荐指数
1
解决办法
1867
查看次数

为什么在Javascript中5> 4> 3!=(5> 4 && 4> 3)为真?

为什么5 > 4 > 3 != (5 > 4 && 4 > 3)Javascript中是真的?

很烦人!

javascript

5
推荐指数
2
解决办法
241
查看次数

重新打开由gem提供的ActiveRecord模型

我正在尝试扩展Vote一个gem(https://github.com/peteonrails/vote_fu)为我的应用程序提供的ActiveRecord模型().(即,不存在vote.rbapp/models)

我的第一个方法是创建一个lib/extend_vote.rb包含代码的文件:

Vote.class_eval do
  after_create :create_activity_stream_event
  has_one :activity_stream_event

  def create_activity_stream_event
    # something..
  end
end
Run Code Online (Sandbox Code Playgroud)

这在创建第一个投票时有效,但是当我尝试创建每个后续投票时,我得到了错误TypeError (can't dup NilClass).

我认为这个错误是由于Vote每次请求后自动重新加载类这一事实引起的,但是lib/extend_vote.rb当服务器启动时,代码只加载一次,这会导致has_one :activity_stream_event关联表现得很奇怪.(另外,问题消失,如果我设置config.cache_classes = truedevelopment.rb)

为了解决这个问题,我尝试通过向to_prepare我的块添加块来对每个请求重新加载投票扩展development.rb:

config.to_prepare do
  load 'extend_vote.rb'
end
Run Code Online (Sandbox Code Playgroud)

这解决了这个(can't dup NilClass)问题,但现在每当我创建一个新的投票时,create_activity_stream_event回调都会被称为额外的时间.即,第一次投票调用一次,第二次调用两次,等等.所以看起来这个to_prepare块正在积极地重新加载扩展TOO并添加重复的回调.

向此Vote模型添加方法和回调的最佳方法是什么?

gem model metaprogramming ruby-on-rails

5
推荐指数
2
解决办法
3326
查看次数