ires 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a02ee558f8ff8d664769a8a1da291eb828434ac0
4
- data.tar.gz: 3a3a08b79dda490833e1c50840347c454c236598
3
+ metadata.gz: 573e3e3d26bbe6a54df1d21e5445287b94eb628e
4
+ data.tar.gz: a29209459ec9bb7dea651db214c3440db9cbd09c
5
5
  SHA512:
6
- metadata.gz: f51c3bdd1589c058775c63caf82249f6778338e57885ad2bbbc5f6cd1383d9f8fb06f87240288cd758bc361a1625351979f6f091b65368d7541ee220817f056b
7
- data.tar.gz: 2cc66ddb1eb3340afde84026893ff9eae5e36401981e9760e11d91f7649a5ef5016105e112d2c07feef2ac0cc90135c9fa5053fb4e284b46045f28e584992bb8
6
+ metadata.gz: 7dfe086ce436074e319636b71eafa3736721c71a0c3c7bb175723e4279c15f6282d3aa72bc181d080798440612f2f70ba8ccaa3b40b2deebaad40f58a86ea3dc
7
+ data.tar.gz: f10ae44af632f4ed0fae261a3e26cba54985006e95913350fcde7cbba1e618037bccd5e0c69775c28cc9c2648f1498a37d51f78d115c061d87f440211feb1cde
data/README.md CHANGED
@@ -11,10 +11,10 @@
11
11
 
12
12
  ```erb
13
13
  <!-- Usually -->
14
- <%= ires_tag( path: "image_01.jpg", width: 90, height: 120 ) %>
14
+ <%= ires_tag(path: "image_01.jpg", width: 90, height: 120) %>
15
15
 
16
16
  <!-- Using image_tag options -->
17
- <%= ires_tag( path: "http://example.com/image_02.jpg", width: 200, height: 200, Ires::Mode::CROP, alt: "example image" ) %>
17
+ <%= ires_tag(path: "http://example.com/image_02.jpg", width: 200, height: 200, Ires::Mode::CROP, alt: "example image") %>
18
18
  ```
19
19
 
20
20
  ### Get resize path
@@ -47,7 +47,7 @@ Filter of resize image.
47
47
  Default: **30days**
48
48
 
49
49
  ```erb
50
- <%= ires_tag( path: '/image.jpg', width: 400, height: 300, expire: 7.days ) %>
50
+ <%= ires_tag(path: '/image.jpg', width: 400, height: 300, expire: 7.days) %>
51
51
  ```
52
52
 
53
53
  ### Saved directory
@@ -1,48 +1,48 @@
1
1
  package ires
2
2
 
3
3
  import (
4
- "bytes"
5
- "image"
6
- "image/gif"
7
- "image/jpeg"
8
- "image/png"
9
- "io"
10
- "io/ioutil"
11
- "net/http"
12
- "os"
13
- "path"
14
- "strings"
15
- "time"
4
+ "bytes"
5
+ "image"
6
+ "image/gif"
7
+ "image/jpeg"
8
+ "image/png"
9
+ "io"
10
+ "io/ioutil"
11
+ "net/http"
12
+ "os"
13
+ "path"
14
+ "strings"
15
+ "time"
16
16
 
17
- "github.com/nfnt/resize"
18
- "github.com/oliamb/cutter"
17
+ "github.com/nfnt/resize"
18
+ "github.com/oliamb/cutter"
19
19
  )
20
20
 
21
21
  // Check expiration date
22
22
  func (i *Ires) DeleteExpireImage() {
23
- today := time.Now().Format("20060102")
24
- dir := i.readImageDir()
25
- files, err := ioutil.ReadDir(dir)
26
- if err != nil {
27
- return
28
- }
23
+ today := time.Now().Format("20060102")
24
+ dir := i.readImageDir()
25
+ files, err := ioutil.ReadDir(dir)
26
+ if err != nil {
27
+ return
28
+ }
29
29
 
30
- for _, file := range files {
31
- findName := file.Name()
32
- matched, _ := path.Match(today+"_*", findName)
33
- if matched {
34
- deleteImage(path.Join(dir, findName))
35
- }
36
- }
30
+ for _, file := range files {
31
+ findName := file.Name()
32
+ matched, _ := path.Match(today+"_*", findName)
33
+ if matched {
34
+ deleteImage(path.Join(dir, findName))
35
+ }
36
+ }
37
37
  }
38
38
 
39
39
  // Input image type is Local or HTTP
40
40
  func (i *Ires) CheckLocal() {
41
- if strings.Index(i.URI, "http") == -1 {
42
- i.IsLocal = true
43
- } else {
44
- i.IsLocal = false
45
- }
41
+ if strings.Index(i.URI, "http") == -1 {
42
+ i.IsLocal = true
43
+ } else {
44
+ i.IsLocal = false
45
+ }
46
46
  }
47
47
 
48
48
  // Input image
@@ -50,11 +50,11 @@ func (i *Ires) inputImage() bool {
50
50
  if i.IsLocal {
51
51
  img, format := localImage(i.URI)
52
52
  i.InputImage = &InputImage{
53
- Image: img,
54
- Format: format,
55
- URI: i.URI,
56
- }
57
- i.setConfig()
53
+ Image: img,
54
+ Format: format,
55
+ URI: i.URI,
56
+ }
57
+ i.setConfig()
58
58
  return true
59
59
  }
60
60
  return i.downloadImage()
@@ -63,30 +63,30 @@ func (i *Ires) inputImage() bool {
63
63
  // Save http image
64
64
  func (i *Ires) downloadImage() bool {
65
65
  res, err := http.Get(i.URI)
66
- if err != nil {
67
- return false
68
- }
69
- defer res.Body.Close()
66
+ if err != nil {
67
+ return false
68
+ }
69
+ defer res.Body.Close()
70
70
 
71
- header, r := copyReader(res.Body)
72
- format := formatSearch(r)
71
+ header, r := copyReader(res.Body)
72
+ format := formatSearch(r)
73
73
 
74
- img, _, err := image.Decode(io.MultiReader(header, res.Body))
75
- if err != nil {
76
- return false
77
- }
74
+ img, _, err := image.Decode(io.MultiReader(header, res.Body))
75
+ if err != nil {
76
+ return false
77
+ }
78
78
 
79
- distURI := i.imageURI(true)
80
- i.InputImage = &InputImage{
81
- Image: img,
82
- Format: format,
83
- URI: distURI,
84
- }
79
+ distURI := i.imageURI(true)
80
+ i.InputImage = &InputImage{
81
+ Image: img,
82
+ Format: format,
83
+ URI: distURI,
84
+ }
85
85
 
86
- if createImage(img, distURI, format) {
87
- i.setConfig()
88
- return true
89
- }
86
+ if createImage(img, distURI, format) {
87
+ i.setConfig()
88
+ return true
89
+ }
90
90
  return false
91
91
  }
92
92
 
@@ -114,7 +114,7 @@ func createImage(img image.Image, path, format string) bool {
114
114
  func localImage(uri string) (image.Image, string) {
115
115
  file, err := os.Open(uri)
116
116
  if err != nil {
117
- return nil, ""
117
+ return nil, ""
118
118
  }
119
119
  defer file.Close()
120
120
 
@@ -124,29 +124,29 @@ func localImage(uri string) (image.Image, string) {
124
124
 
125
125
  img, _, err := image.Decode(io.MultiReader(header, file))
126
126
  if err != nil {
127
- return nil, ""
127
+ return nil, ""
128
128
  }
129
129
  return img, format
130
130
  }
131
131
 
132
132
  // Set image config
133
133
  func (i *Ires) setConfig() {
134
- file, err := os.Open(i.InputImage.URI)
135
- if err != nil {
136
- panic(err)
137
- }
138
- defer file.Close()
134
+ file, err := os.Open(i.InputImage.URI)
135
+ if err != nil {
136
+ panic(err)
137
+ }
138
+ defer file.Close()
139
139
 
140
- conf, _, err := image.DecodeConfig(file)
141
- if err != nil {
142
- panic(err)
143
- }
144
- i.InputImage.Config = conf
140
+ conf, _, err := image.DecodeConfig(file)
141
+ if err != nil {
142
+ panic(err)
143
+ }
144
+ i.InputImage.Config = conf
145
145
  }
146
146
 
147
147
  // Resizing & Cropping
148
148
  func (i *Ires) resizeToCrop() image.Image {
149
- inputImg := i.InputImage.Image
149
+ inputImg := i.InputImage.Image
150
150
  var outputImg image.Image
151
151
  isAsp, conf := i.isValidAspectRatio()
152
152
 
@@ -237,21 +237,21 @@ func copyReader(body io.Reader) (io.Reader, io.Reader) {
237
237
 
238
238
  // Valid resize type
239
239
  func (i *Ires) validResizeType() bool {
240
- config := i.InputImage.Config
241
- valid := false
242
- switch i.ResizeType {
243
- case All:
244
- valid = true
245
- case Smaller:
246
- if config.Width < i.Width && config.Height < i.Height {
247
- valid = true
248
- }
249
- case Larger:
250
- if i.Width <= config.Width && i.Height <= config.Height {
251
- valid = true
252
- }
253
- default:
254
- valid = true
255
- }
256
- return valid
240
+ config := i.InputImage.Config
241
+ valid := false
242
+ switch i.ResizeType {
243
+ case All:
244
+ valid = true
245
+ case Smaller:
246
+ if config.Width < i.Width && config.Height < i.Height {
247
+ valid = true
248
+ }
249
+ case Larger:
250
+ if i.Width <= config.Width && i.Height <= config.Height {
251
+ valid = true
252
+ }
253
+ default:
254
+ valid = true
255
+ }
256
+ return valid
257
257
  }
@@ -1,56 +1,58 @@
1
1
  package ires
2
2
 
3
3
  import (
4
- "image"
4
+ "image"
5
5
 
6
- "github.com/nfnt/resize"
7
- "github.com/oliamb/cutter"
6
+ "github.com/nfnt/resize"
7
+ "github.com/oliamb/cutter"
8
8
  )
9
9
 
10
10
  type Mode int
11
+
11
12
  const (
12
- Resize Mode = iota
13
- Crop
14
- ResizeToCrop
13
+ Resize Mode = iota
14
+ Crop
15
+ ResizeToCrop
15
16
  )
16
17
 
17
18
  type ResizeType int
19
+
18
20
  const (
19
- All ResizeType = iota
20
- Smaller
21
- Larger
21
+ All ResizeType = iota
22
+ Smaller
23
+ Larger
22
24
  )
23
25
 
24
26
  type (
25
- // Size is ...
26
- Size struct {
27
- Width, Height int
28
- }
29
-
30
- // InputImage is ...
31
- InputImage struct {
32
- Image image.Image
33
- Config image.Config
34
- Format string
35
- URI string
36
- }
37
-
38
- // Ires is ...
39
- Ires struct {
40
- Size
41
- ResizeType
42
- Mode
43
- *InputImage
44
- URI string
45
- Dir string
46
- Expire string
47
- IsLocal bool
48
- }
27
+ // Size is ...
28
+ Size struct {
29
+ Width, Height int
30
+ }
31
+
32
+ // InputImage is ...
33
+ InputImage struct {
34
+ Image image.Image
35
+ Config image.Config
36
+ Format string
37
+ URI string
38
+ }
39
+
40
+ // Ires is ...
41
+ Ires struct {
42
+ Size
43
+ ResizeType
44
+ Mode
45
+ *InputImage
46
+ URI string
47
+ Dir string
48
+ Expire string
49
+ IsLocal bool
50
+ }
49
51
  )
50
52
 
51
53
  // Resize is ...
52
54
  func (i *Ires) Resize() string {
53
- i.Mode = Resize
55
+ i.Mode = Resize
54
56
  distURI := i.imageURI(false)
55
57
  // When the image exists, return the image path
56
58
  if isExistsImage(distURI) {
@@ -63,46 +65,46 @@ func (i *Ires) Resize() string {
63
65
 
64
66
  var outputImg image.Image
65
67
  if i.validResizeType() {
66
- outputImg = resize.Resize(uint(i.Width), uint(i.Height), i.InputImage.Image, resize.Lanczos3)
67
- } else {
68
- outputImg = i.InputImage.Image
69
- }
68
+ outputImg = resize.Resize(uint(i.Width), uint(i.Height), i.InputImage.Image, resize.Lanczos3)
69
+ } else {
70
+ outputImg = i.InputImage.Image
71
+ }
70
72
  createImage(outputImg, distURI, i.InputImage.Format)
71
73
  return i.targetImageURI(distURI)
72
74
  }
73
75
 
74
76
  // Crop is Crop ...
75
77
  func (i *Ires) Crop() string {
76
- i.Mode = Crop
77
- distURI := i.imageURI(false)
78
+ i.Mode = Crop
79
+ distURI := i.imageURI(false)
78
80
  // When the image exists, return the image path
79
81
  if isExistsImage(distURI) {
80
- return i.targetImageURI(distURI)
81
- }
82
+ return i.targetImageURI(distURI)
83
+ }
82
84
 
83
85
  if !i.inputImage() {
84
86
  return i.URI
85
87
  }
86
88
 
87
- var outputImg image.Image
88
- if i.validResizeType() {
89
- outputImg, _ = cutter.Crop(i.InputImage.Image, cutter.Config{
90
- Width: i.Width,
91
- Height: i.Height,
92
- Mode: cutter.Centered,
93
- Options: cutter.Copy,
94
- })
95
- } else {
96
- outputImg = i.InputImage.Image
97
- }
98
- createImage(outputImg, distURI, i.InputImage.Format)
99
- return i.targetImageURI(distURI)
89
+ var outputImg image.Image
90
+ if i.validResizeType() {
91
+ outputImg, _ = cutter.Crop(i.InputImage.Image, cutter.Config{
92
+ Width: i.Width,
93
+ Height: i.Height,
94
+ Mode: cutter.Centered,
95
+ Options: cutter.Copy,
96
+ })
97
+ } else {
98
+ outputImg = i.InputImage.Image
99
+ }
100
+ createImage(outputImg, distURI, i.InputImage.Format)
101
+ return i.targetImageURI(distURI)
100
102
  }
101
103
 
102
104
  // ResizeToCrop is ...
103
105
  func (i *Ires) ResizeToCrop() string {
104
- i.Mode = ResizeToCrop
105
- distURI := i.imageURI(false)
106
+ i.Mode = ResizeToCrop
107
+ distURI := i.imageURI(false)
106
108
  // When the image exists, return the image path
107
109
  if isExistsImage(distURI) {
108
110
  return i.targetImageURI(distURI)
@@ -112,12 +114,12 @@ func (i *Ires) ResizeToCrop() string {
112
114
  return i.URI
113
115
  }
114
116
 
115
- var outputImg image.Image
116
- if i.validResizeType() {
117
- outputImg = i.resizeToCrop()
118
- } else {
119
- outputImg = i.InputImage.Image
120
- }
121
- createImage(outputImg, distURI, i.InputImage.Format)
122
- return i.targetImageURI(distURI)
117
+ var outputImg image.Image
118
+ if i.validResizeType() {
119
+ outputImg = i.resizeToCrop()
120
+ } else {
121
+ outputImg = i.InputImage.Image
122
+ }
123
+ createImage(outputImg, distURI, i.InputImage.Format)
124
+ return i.targetImageURI(distURI)
123
125
  }
@@ -40,36 +40,36 @@ func (i *Ires) imageURI(original bool) string {
40
40
 
41
41
  // Generate image name
42
42
  func (i *Ires) imageName(original bool) string {
43
- splitPath := strings.Split(i.URI, "/")
44
-
45
- // ex. sample.jpg
46
- fileName := splitPath[len(splitPath)-1]
47
- // ex. .jpg
48
- ext := filepath.Ext(fileName)
49
-
50
- name := strings.Replace(fileName, ext, "", 1)
51
-
52
- extInfo := strings.Split(ext, "?")
53
- if len(extInfo) > 1 {
54
- ext = extInfo[0]
55
- name += "_" + strings.Join(extInfo[1:], "")
56
- }
57
-
58
- var prefix string
59
- if original {
60
- prefix = "original"
61
- } else {
62
- switch i.Mode {
63
- case Resize:
64
- prefix = prefixSize(i.Size) + "_resize"
65
- case Crop:
66
- prefix = prefixSize(i.Size) + "_crop"
67
- case ResizeToCrop:
68
- prefix = prefixSize(i.Size) + "_resize_to_crop"
69
- }
70
- }
71
-
72
- return i.Expire + "_" + name + "_" + prefix + ext
43
+ splitPath := strings.Split(i.URI, "/")
44
+
45
+ // ex. sample.jpg
46
+ fileName := splitPath[len(splitPath)-1]
47
+ // ex. .jpg
48
+ ext := filepath.Ext(fileName)
49
+
50
+ name := strings.Replace(fileName, ext, "", 1)
51
+
52
+ extInfo := strings.Split(ext, "?")
53
+ if len(extInfo) > 1 {
54
+ ext = extInfo[0]
55
+ name += "_" + strings.Join(extInfo[1:], "")
56
+ }
57
+
58
+ var prefix string
59
+ if original {
60
+ prefix = "original"
61
+ } else {
62
+ switch i.Mode {
63
+ case Resize:
64
+ prefix = prefixSize(i.Size) + "_resize"
65
+ case Crop:
66
+ prefix = prefixSize(i.Size) + "_crop"
67
+ case ResizeToCrop:
68
+ prefix = prefixSize(i.Size) + "_resize_to_crop"
69
+ }
70
+ }
71
+
72
+ return i.Expire + "_" + name + "_" + prefix + ext
73
73
  }
74
74
 
75
75
  // Create prefix by size
@@ -8,7 +8,8 @@ module Ires
8
8
  class << self
9
9
  # Resize image path
10
10
  # @return [String]
11
- def path(path:, width:, height:, type: Type::ALL, mode: Mode::RESIZE, expire: 30.days)
11
+ def path(path:, width: nil, height: nil, type: Type::ALL, mode: Mode::RESIZE, expire: 30.days)
12
+ raise ArgumentError, "Either width or height is required" if width.nil? && height.nil?
12
13
  os = Ires::Os.current
13
14
  return nil if os.nil?
14
15
 
@@ -22,8 +23,8 @@ module Ires
22
23
 
23
24
  ires_element = {
24
25
  path: full_path,
25
- width: width,
26
- height: height,
26
+ width: width || 0,
27
+ height: height || 0,
27
28
  mode: mode,
28
29
  type: type,
29
30
  dir: dir,
@@ -1,3 +1,3 @@
1
1
  module Ires
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -8,11 +8,13 @@ module Ires
8
8
  module ViewHelper
9
9
  # Image resize
10
10
  # @return [image_tag]
11
- def ires_tag(path:, width:, height:, type: Type::ALL, mode: Mode::RESIZE, expire: 30.days, **option)
11
+ def ires_tag(path:, width: nil, height: nil, type: Type::ALL, mode: Mode::RESIZE, expire: 30.days, **option)
12
+ raise ArgumentError, "Either width or height is required" if width.nil? && height.nil?
13
+
12
14
  image = Ires::Service.path(
13
15
  path: path,
14
- width: width,
15
- height: height,
16
+ width: width || 0,
17
+ height: height || 0,
16
18
  mode: mode,
17
19
  type: type,
18
20
  expire: expire
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ires
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - enta0701
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-16 00:00:00.000000000 Z
11
+ date: 2018-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport