fastimage 2.0.0 → 2.0.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 +7 -9
- data/lib/fastimage.rb +35 -19
- 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: 8e91d72ee9017341028e1a4e39335bcbe38fd430
|
4
|
+
data.tar.gz: 1967da0aa3c2814d4cf8451df75dff1c50bc2d98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 272713d7824e59ef0f049f503ecbb57cbb2f65bb1e3a756aed3830ffd5131fcb2943d06d090d9bfb82f3f99ca64f385d76debf5f3b121b3974b16be6b7aa1676
|
7
|
+
data.tar.gz: 390252f65f7d4770c00431de27f353835ec6d39ca2ed32be99337210daabc769e28d9823a24905b86f8f557c63edc0502cff5a1c34aaee25e004316bc3efda2c
|
data/README.textile
CHANGED
@@ -19,29 +19,27 @@ You only need supply the uri, and FastImage will do the rest.
|
|
19
19
|
|
20
20
|
h2. Features
|
21
21
|
|
22
|
-
|
23
|
-
interpreted as a filename, and FastImage will attempt to open it with File#open.
|
22
|
+
FastImage can also read local (and other) files - anything that is not parseable as a URI will be interpreted as a filename, and FastImage will attempt to open it with @File#open@.
|
24
23
|
|
25
|
-
FastImage will also automatically read from any object that responds to
|
26
|
-
instance an IO object if that is passed instead of a URI.
|
24
|
+
FastImage will also automatically read from any object that responds to @:read@ - for instance an IO object if that is passed instead of a URI.
|
27
25
|
|
28
26
|
FastImage will follow up to 4 HTTP redirects to get the image.
|
29
27
|
|
30
|
-
FastImage will obey the http_proxy setting in your environment to route requests via a proxy. You can also pass a
|
28
|
+
FastImage will obey the @http_proxy@ setting in your environment to route requests via a proxy. You can also pass a @:proxy@ argument if you want to specify the proxy address in the call.
|
31
29
|
|
32
|
-
You can add a timeout to the request which will limit the request time by passing
|
30
|
+
You can add a timeout to the request which will limit the request time by passing @:timeout => number_of_seconds@.
|
33
31
|
|
34
|
-
FastImage normally replies
|
32
|
+
FastImage normally replies with @nil@ if it encounters an error, but you can pass @:raise_on_failure => true@ to get an exception.
|
35
33
|
|
36
34
|
FastImage also provides a reader for the content length header provided in HTTP. This may be useful to assess the file size of an image, but do not rely on it exclusively - it will not be present in chunked responses for instance.
|
37
35
|
|
38
|
-
FastImage accepts additional HTTP headers. This can be used to set a user agent or referrer which some servers require. Pass an
|
36
|
+
FastImage accepts additional HTTP headers. This can be used to set a user agent or referrer which some servers require. Pass an @:http_header@ argument to specify headers, e.g., @:http_header => {'User-Agent' => 'Fake Browser'}@.
|
39
37
|
|
40
38
|
FastImage can give you information about the parsed display orientation of an image with Exif data (jpeg or tiff).
|
41
39
|
|
42
40
|
h2. Security
|
43
41
|
|
44
|
-
As of v1.6.7 FastImage no longer uses openuri to open files, but directly calls File.open
|
42
|
+
As of v1.6.7 FastImage no longer uses @openuri@ to open files, but directly calls @File.open@. Take care to sanitise the strings passed to FastImage; it will try to read from whatever is passed.
|
45
43
|
|
46
44
|
h2. Examples
|
47
45
|
|
data/lib/fastimage.rb
CHANGED
@@ -417,6 +417,24 @@ class FastImage
|
|
417
417
|
@pos += n
|
418
418
|
result
|
419
419
|
end
|
420
|
+
|
421
|
+
def skip(n)
|
422
|
+
discarded = 0
|
423
|
+
fetched = @str[@strpos..-1].size
|
424
|
+
while n > fetched
|
425
|
+
discarded += @str[@strpos..-1].size
|
426
|
+
new_string = @read_fiber.resume
|
427
|
+
raise CannotParseImage if !new_string
|
428
|
+
|
429
|
+
new_string.force_encoding("ASCII-8BIT") if String.method_defined? :force_encoding
|
430
|
+
|
431
|
+
fetched += new_string.size
|
432
|
+
@str = new_string
|
433
|
+
@strpos = 0
|
434
|
+
end
|
435
|
+
@strpos = @strpos + n - discarded
|
436
|
+
@pos += n
|
437
|
+
end
|
420
438
|
end
|
421
439
|
|
422
440
|
class IOStream < SimpleDelegator # :nodoc:
|
@@ -424,7 +442,7 @@ class FastImage
|
|
424
442
|
end
|
425
443
|
|
426
444
|
def parse_type
|
427
|
-
case @stream.peek(2)
|
445
|
+
parsed_type = case @stream.peek(2)
|
428
446
|
when "BM"
|
429
447
|
:bmp
|
430
448
|
when "GI"
|
@@ -444,26 +462,20 @@ class FastImage
|
|
444
462
|
when 2 then :cur
|
445
463
|
end
|
446
464
|
when "RI"
|
447
|
-
if @stream.peek(12)[8..11] == "WEBP"
|
448
|
-
:webp
|
449
|
-
else
|
450
|
-
raise UnknownImageType
|
451
|
-
end
|
465
|
+
:webp if @stream.peek(12)[8..11] == "WEBP"
|
452
466
|
when "<s"
|
453
467
|
:svg
|
454
468
|
when "<?"
|
455
|
-
if @stream.peek(100).include?("<svg")
|
456
|
-
:svg
|
457
|
-
else
|
458
|
-
raise UnknownImageType
|
459
|
-
end
|
460
|
-
else
|
461
|
-
raise UnknownImageType
|
469
|
+
:svg if @stream.peek(100).include?("<svg")
|
462
470
|
end
|
471
|
+
|
472
|
+
parsed_type or raise UnknownImageType
|
463
473
|
end
|
464
474
|
|
465
475
|
def parse_size_for_ico
|
466
|
-
@stream.read(
|
476
|
+
icons = @stream.read(6)[4..5].unpack('v').first
|
477
|
+
sizes = icons.times.map { @stream.read(16).unpack('C2').map { |x| x == 0 ? 256 : x } }.sort_by { |w,h| w * h }
|
478
|
+
sizes.last
|
467
479
|
end
|
468
480
|
alias_method :parse_size_for_cur, :parse_size_for_ico
|
469
481
|
|
@@ -479,7 +491,7 @@ class FastImage
|
|
479
491
|
loop do
|
480
492
|
@state = case @state
|
481
493
|
when nil
|
482
|
-
@stream.
|
494
|
+
@stream.skip(2)
|
483
495
|
:started
|
484
496
|
when :started
|
485
497
|
@stream.read_byte == 0xFF ? :sof : :started
|
@@ -505,10 +517,10 @@ class FastImage
|
|
505
517
|
end
|
506
518
|
when :skipframe
|
507
519
|
skip_chars = @stream.read_int - 2
|
508
|
-
@stream.
|
520
|
+
@stream.skip(skip_chars)
|
509
521
|
:started
|
510
522
|
when :readsize
|
511
|
-
|
523
|
+
@stream.skip(3)
|
512
524
|
height = @stream.read_int
|
513
525
|
width = @stream.read_int
|
514
526
|
width, height = height, width if @exif && @exif.rotated?
|
@@ -552,7 +564,7 @@ class FastImage
|
|
552
564
|
end
|
553
565
|
|
554
566
|
def parse_size_vp8l
|
555
|
-
@stream.
|
567
|
+
@stream.skip(1) # 0x2f
|
556
568
|
b1, b2, b3, b4 = @stream.read(4).bytes.to_a
|
557
569
|
[1 + (((b2 & 0x3f) << 8) | b1), 1 + (((b4 & 0xF) << 10) | (b3 << 2) | ((b2 & 0xC0) >> 6))]
|
558
570
|
end
|
@@ -625,7 +637,11 @@ class FastImage
|
|
625
637
|
@stream.read(2) # 42
|
626
638
|
|
627
639
|
offset = @stream.read(4).unpack(@long)[0]
|
628
|
-
@stream.
|
640
|
+
if @stream.respond_to?(:skip)
|
641
|
+
@stream.skip(offset - 8)
|
642
|
+
else
|
643
|
+
@stream.read(offset - 8)
|
644
|
+
end
|
629
645
|
|
630
646
|
parse_exif_ifd
|
631
647
|
|
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.0.
|
4
|
+
version: 2.0.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: 2016-03
|
11
|
+
date: 2016-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|