我正在尝试使用 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) Gmail会自动显示看起来像签名的文字.任何人都有猜测它是如何做到这一点的?(我注意到它取决于发件人姓名的存在,但我认为这只是故事的一部分).
我问,因为我正在开发一个具有电子邮件界面的Web应用程序,我想在显示他们的电子邮件内容之前删除用户的签名.
我的Web应用程序类似于StackOverflow,因为不同的用户经常编辑相同的文本块.
目前我们只支持纯文本,因此很容易向用户显示文本在编辑之间的变化情况.
我想在这些字段中支持富文本,但我的用户是非技术性的,因此任何类型的标记都不是一种选择.
有没有支持差异的基于javascript的富文本编辑器?理想情况下,差异也是富文本格式,但如果需要,它们可以用降价或类似方式呈现(我想不惜一切代价避免使用原始HTML).
在我的在线商店中,如果订单处于"已授权"状态并且尚未有任何关联的货件,则该订单已准备好发货.现在我这样做:
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)
有没有更好的办法?
我想让用户能够以随机顺序浏览我的博客帖子.
我无法像这样实现它:
@posts = Post.paginate :page => params[:page], :order => 'RANDOM()'
Run Code Online (Sandbox Code Playgroud)
因为:order每个查询都会调用该参数,因此我冒着重复博客帖子的风险.
最好的方法是什么?
我有一份报告,其中列出了总值,然后是括号中的变化.例如:
歌曲:45(上周+10)
所以我想将整数10打印为"+10",将-10打印为"-10"
现在我正在做
(song_change >= 0 ? '+' : '') + song_change.to_s
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
每当用户访问我的网站上的"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的重定向可以解决这个问题.不幸的是,这不是一个选项)
为什么5 > 4 > 3 != (5 > 4 && 4 > 3)Javascript中是真的?
很烦人!
我正在尝试扩展Vote一个gem(https://github.com/peteonrails/vote_fu)为我的应用程序提供的ActiveRecord模型().(即,不存在vote.rb于app/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 = true的development.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模型添加方法和回调的最佳方法是什么?
javascript ×3
ruby ×2
activerecord ×1
associations ×1
bitmap-fonts ×1
canvas ×1
diff ×1
email ×1
fabricjs ×1
fonts ×1
gem ×1
gmail ×1
hpricot ×1
integer ×1
kerning ×1
model ×1
parsing ×1
random ×1
redirect ×1
richtextbox ×1
signature ×1