fastimage 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.textile +5 -0
- data/lib/fastimage.rb +16 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 286c430f0c94ceafdbcbe884ae9bee4252e549c0
|
4
|
+
data.tar.gz: c006bb076bdefba5bfdea4f024c8f327189b0b83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb7f192a5d7c2909c9b5275305608ed3c2e9c97e6d7fc9d0bd1386b08e3ccc29621a8cff9ba3b83eae4651fdbf8c27b2aa0cd70c5dea50efcd0912c7d82fcdc2
|
7
|
+
data.tar.gz: 72a91dbf2da909e0ebadbbd902fb7ffbbd3d7718073726fed3b23044bbc67134892008d227607d0f27e4b89ba464a451526a95c3bb047ed353c9addb98485a63
|
data/README.textile
CHANGED
@@ -92,6 +92,10 @@ h2. Documentation
|
|
92
92
|
|
93
93
|
"http://sdsykes.github.io/fastimage/rdoc/FastImage.html":http://sdsykes.github.io/fastimage/rdoc/FastImage.html
|
94
94
|
|
95
|
+
h2. Maintainer
|
96
|
+
|
97
|
+
FastImage is maintained by Stephen Sykes (@sdsykes). Support this project by using "LibPixel":https://libpixel.com cloud based image resizing and processing service.
|
98
|
+
|
95
99
|
h2. Benchmark
|
96
100
|
|
97
101
|
It's way faster than conventional methods (for example the image_size gem) for most types of file when fetching over the wire.
|
@@ -151,6 +155,7 @@ h2. FastImage in other languages
|
|
151
155
|
* "PHP by tommoor":https://github.com/tommoor/fastimage
|
152
156
|
* "Node.js by ShogunPanda":https://github.com/ShogunPanda/fastimage
|
153
157
|
* "Objective C by kylehickinson":https://github.com/kylehickinson/FastImage
|
158
|
+
* "Android by qstumn":https://github.com/qstumn/FastImageSize
|
154
159
|
|
155
160
|
h2. Licence
|
156
161
|
|
data/lib/fastimage.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# coding: ASCII-8BIT
|
2
3
|
|
3
4
|
# FastImage finds the size or type of an image given its uri.
|
@@ -190,6 +191,8 @@ class FastImage
|
|
190
191
|
|
191
192
|
@property = @options[:type_only] ? :type : :size
|
192
193
|
|
194
|
+
@type, @state = nil
|
195
|
+
|
193
196
|
if uri.respond_to?(:read)
|
194
197
|
fetch_using_read(uri)
|
195
198
|
elsif uri.start_with?('data:')
|
@@ -385,7 +388,9 @@ class FastImage
|
|
385
388
|
|
386
389
|
def fetch_using_base64(uri)
|
387
390
|
data = uri.split(',')[1]
|
388
|
-
|
391
|
+
decoded = Base64.decode64(data)
|
392
|
+
@content_length = decoded.size
|
393
|
+
fetch_using_read StringIO.new(decoded)
|
389
394
|
end
|
390
395
|
|
391
396
|
module StreamUtil # :nodoc:
|
@@ -431,7 +436,7 @@ class FastImage
|
|
431
436
|
@strpos = 0
|
432
437
|
end
|
433
438
|
|
434
|
-
|
439
|
+
@str[@strpos..(@strpos + n - 1)]
|
435
440
|
end
|
436
441
|
|
437
442
|
def read(n)
|
@@ -488,7 +493,7 @@ class FastImage
|
|
488
493
|
:webp if @stream.peek(12)[8..11] == "WEBP"
|
489
494
|
when "<s"
|
490
495
|
:svg
|
491
|
-
when
|
496
|
+
when /<[?!]/
|
492
497
|
# Peek 10 more chars each time, and if end of file is reached just raise
|
493
498
|
# unknown. We assume the <svg tag cannot be within 10 chars of the end of
|
494
499
|
# the file, and is within the first 250 chars.
|
@@ -518,6 +523,7 @@ class FastImage
|
|
518
523
|
end
|
519
524
|
|
520
525
|
def parse_size_for_jpeg
|
526
|
+
exif = nil
|
521
527
|
loop do
|
522
528
|
@state = case @state
|
523
529
|
when nil
|
@@ -533,7 +539,7 @@ class FastImage
|
|
533
539
|
io = StringIO.new(data)
|
534
540
|
if io.read(4) == "Exif"
|
535
541
|
io.read(2)
|
536
|
-
|
542
|
+
exif = Exif.new(IOStream.new(io)) rescue nil
|
537
543
|
end
|
538
544
|
:started
|
539
545
|
when 0xe0..0xef
|
@@ -553,8 +559,8 @@ class FastImage
|
|
553
559
|
@stream.skip(3)
|
554
560
|
height = @stream.read_int
|
555
561
|
width = @stream.read_int
|
556
|
-
width, height = height, width if
|
557
|
-
return [width, height,
|
562
|
+
width, height = height, width if exif && exif.rotated?
|
563
|
+
return [width, height, exif ? exif.orientation : 1]
|
558
564
|
end
|
559
565
|
end
|
560
566
|
end
|
@@ -575,7 +581,7 @@ class FastImage
|
|
575
581
|
|
576
582
|
def parse_size_for_webp
|
577
583
|
vp8 = @stream.read(16)[12..15]
|
578
|
-
|
584
|
+
_len = @stream.read(4).unpack("V")
|
579
585
|
case vp8
|
580
586
|
when "VP8 "
|
581
587
|
parse_size_vp8
|
@@ -617,6 +623,7 @@ class FastImage
|
|
617
623
|
|
618
624
|
def initialize(stream)
|
619
625
|
@stream = stream
|
626
|
+
@width, @height, @orientation = nil
|
620
627
|
parse_exif
|
621
628
|
end
|
622
629
|
|
@@ -696,6 +703,7 @@ class FastImage
|
|
696
703
|
class Svg # :nodoc:
|
697
704
|
def initialize(stream)
|
698
705
|
@stream = stream
|
706
|
+
@width, @height, @ratio, @viewbox_width, @viewbox_height = nil
|
699
707
|
parse_svg
|
700
708
|
end
|
701
709
|
|
@@ -732,7 +740,7 @@ class FastImage
|
|
732
740
|
return if @width
|
733
741
|
elsif attr_name.join =~ /viewbox/i
|
734
742
|
values = attr_value.split(/\s/)
|
735
|
-
if values[2].to_f > 0 && values[3].to_f > 0
|
743
|
+
if values[2].to_f > 0 && values[3].to_f > 0
|
736
744
|
@ratio = values[2].to_f / values[3].to_f
|
737
745
|
@viewbox_width = values[2].to_i
|
738
746
|
@viewbox_height = values[3].to_i
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastimage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Sykes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fakeweb
|