Skip to content

Commit

Permalink
feat(builder): support licensing images in blog posting
Browse files Browse the repository at this point in the history
  • Loading branch information
macrat committed Mar 25, 2024
1 parent 1be986f commit 7734ea7
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
26 changes: 24 additions & 2 deletions builder/markdown.go
Expand Up @@ -345,8 +345,8 @@ func (r ImageRenderer) Render(w markdown.BufWriter, source []byte, node ast.Node

image := node.(*ast.Image)

sizes := regexp.MustCompile(`^([0-9]+)x([0-9]+)$`).FindSubmatch(image.Title)
if len(sizes) == 3 {
sizes := regexp.MustCompile(`^([0-9]+)x([0-9]+)( CC-BY)?$`).FindSubmatch(image.Title)
if len(sizes) >= 3 {
_, err := fmt.Fprintf(
w,
`<img src="%s" alt="%s" width="%s" height="%s" loading="lazy" />`,
Expand All @@ -355,6 +355,28 @@ func (r ImageRenderer) Render(w markdown.BufWriter, source []byte, node ast.Node
sizes[1],
sizes[2],
)
if err != nil {
return ast.WalkStop, err
}

if len(sizes) >= 4 && string(sizes[3]) == " CC-BY" {
_, err = fmt.Fprintf(w, `
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ImageObject",
"license": "https://creativecommons.org/licenses/by/4.0",
"contentUrl": "https://blanktar.jp%s",
"creditText": "blanktar.jp",
"copyrightNotice": "SHIDA Yuma (aka MacRat)",
"creator": {
"@type": "Person",
"name": "MacRat"
}
}
</script>
`, image.Destination)
}

return ast.WalkSkipChildren, err
} else {
Expand Down
2 changes: 1 addition & 1 deletion pages/blog/2024/01/blanktar-renewal.md
Expand Up @@ -83,7 +83,7 @@ Exif情報は[dsprea/go-exif](https://github.com/dsoprea/go-exif)を使って読

ビルド時間の大半は画像の生成が占めていたので、一度生成した画像はキャッシュするようにしました。

![画像ビルドの流れ。キャッシュディレクトリにキャッシュがあればそれをコピーして使用日時を更新する。キャッシュが見つからなければ新たに生成して、キャッシュディレクトリと出力先ディレクトリの両方に保存する。最後にしばらく使っていないキャッシュを消して終了。](/blog/2024/01/blanktar-renewal/image-building-flow.svg "601x689")
![画像ビルドの流れ。キャッシュディレクトリにキャッシュがあればそれをコピーして使用日時を更新する。キャッシュが見つからなければ新たに生成して、キャッシュディレクトリと出力先ディレクトリの両方に保存する。最後にしばらく使っていないキャッシュを消して終了。](/blog/2024/01/blanktar-renewal/image-building-flow.svg "601x689 CC-BY")
<!--
flowchart
ビルド開始 --&gt; start[/画像の枚数分繰り返し\]
Expand Down
4 changes: 2 additions & 2 deletions pages/blog/2024/01/golang-resize-image.md
Expand Up @@ -154,7 +154,7 @@ func ResizeImageKeepAspect(img image.Image, size int) image.Image {
画像をトリミングする場合、以下のような考え方で切り抜く範囲を決めます。
左上座標が (top, left) 、右下の座標が (top+width, left+height) 、完成する画像のサイズは width × height になります。

![画像をトリミングする場合の座標のイメージ。元となる画像の左上から、トリミングしたいエリアの一番上までの高さがTop、一番左までの幅がLeft、トリミングしたいエリアの幅と高さがWidthとHeightとなる。](/blog/2024/01/golang-resize-image/image-triming.svg "480x320")
![画像をトリミングする場合の座標のイメージ。元となる画像の左上から、トリミングしたいエリアの一番上までの高さがTop、一番左までの幅がLeft、トリミングしたいエリアの幅と高さがWidthとHeightとなる。](/blog/2024/01/golang-resize-image/image-triming.svg "480x320 CC-BY")

座標が決まったら、以下のようなコードでトリミングをします。

Expand All @@ -177,7 +177,7 @@ func TrimImage(img image.Image, top, left, width, height int) image.Image {
トリミング方法のよくあるパターンとして、画像の中心部分を正方形になるように切り抜く場合を取り上げます。
具体的には、サムネイルに使うための画像を作成する場合などですね。

![画像を正方形にくり抜くイメージ。横長の画像の左右を切って、中央の正方形になる部分を取り出している。](/blog/2024/01/golang-resize-image/image-square-triming.svg "480x320")
![画像を正方形にくり抜くイメージ。横長の画像の左右を切って、中央の正方形になる部分を取り出している。](/blog/2024/01/golang-resize-image/image-square-triming.svg "480x320 CC-BY")

```go
func SquareTrimImage(img image.Image, size int) image.Image {
Expand Down
9 changes: 9 additions & 0 deletions templates/index.html
Expand Up @@ -2,6 +2,15 @@

{{define "head"}}
<meta property="og:image" content="https://blanktar.jp/images/blanktar.png">

<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "WebSite",
"name": "Blanktar",
"url": "https://blanktar.jp"
}
</script>
{{end}}

{{/* <style> */}}
Expand Down

0 comments on commit 7734ea7

Please sign in to comment.