在 Facebook 上分享 Dcard 文章時,如果沒有指定圖片的話,可能會看到如下的文章摘要:
這張圖片是透過 Go library draw2d 產生的,它有類似 HTML5 canvas 的 API,所以畫一些簡單的圖形都還算小菜一碟,然而在處理文字上就沒這麼得心應手了。
src, _ := loadBaseImageForPost(post)
在 Facebook 上分享 Dcard 文章時,如果沒有指定圖片的話,可能會看到如下的文章摘要:
這張圖片是透過 Go library draw2d 產生的,它有類似 HTML5 canvas 的 API,所以畫一些簡單的圖形都還算小菜一碟,然而在處理文字上就沒這麼得心應手了。
src, _ := loadBaseImageForPost(post)
func drawLine(gc *draw2dimg.GraphicContext, str string, maxX float64, maxY float64, x float64, y float64) (bool, float64) { | |
// Handle empty line | |
if len(strings.TrimSpace(str)) == 0 { | |
return false, y + gc.Current.FontSize*lineHeight | |
} | |
list := []rune(str) | |
length := len(list) | |
offsetX := x | |
offsetY := y |
func drawLine(gc *draw2dimg.GraphicContext, str string, maxX float64, maxY float64, x float64, y float64) (bool, float64) { | |
// Handle empty line | |
if len(strings.TrimSpace(str)) == 0 { | |
return false, y + gc.Current.FontSize*lineHeight | |
} | |
list := []rune(str) | |
length := len(list) | |
offsetX := x | |
offsetY := y |
func drawLine(gc *draw2dimg.GraphicContext, str string, x float64, y float64) { | |
gc.FillStringAt(str, x, y) | |
} | |
func drawText(gc *draw2dimg.GraphicContext, str string, width float64, height float64, x float64, y float64) { | |
str = strings.Trim(str, " \n\r\t") | |
lines := strings.Split(str, "\n") | |
fontSize := gc.Current.FontSize | |
offsetY := y | |
wrapLines := []string{} |
draw2d.SetFontFolder("static/fonts") | |
draw2d.SetFontNamer(func(fontData draw2d.FontData) string { | |
return "WenQuanYiMicroHei.ttf" | |
}) |
2016/11/04 16:06:16 open ../resource/font/luxisr.ttf: no such file or directory | |
2016/11/04 16:06:16 open ../resource/font/luxisr.ttf: no such file or directory | |
2016/11/04 16:06:16 No font set, and no default font available. |
src, _ := loadBaseImageForPost(post) | |
img := image.NewRGBA(src.Bounds()) | |
gc := draw2dimg.NewGraphicContext(img) | |
gc.DrawImage(src) | |
// Draw title | |
gc.SetFillColor(color.RGBA{0xff, 0xff, 0xff, 0xff}) | |
gc.SetFontSize(26) | |
gc.FillStringAt(post.Title, 140, 81.5) |
'use strict'; | |
var highlight = require('highlight.js'); | |
var Highlights = require('highlights'); | |
var highlighter = new Highlights(); | |
var util = require('../lib'); | |
var fs = require('fs'); | |
var pathFn = require('path'); | |
var fixture = fs.readFileSync(pathFn.join(__dirname, 'fixtures', 'q3.js'), 'utf8'); |
var input = ''; | |
process.stdin.resume(); | |
process.stdin.setEncoding('utf8'); | |
process.stdin.on('data', function(chunk) { | |
input += chunk; | |
}); | |
process.stdin.on('end', function() { |
import exp.*; | |
import flowd.*; | |
class P99 extends FunNode { | |
P99(){ | |
super("P99"); | |
Var i = addVar("i"); | |
Var j = addVar("j"); | |
addBeginNode("L0"); |