papirus 0.2.1 → 0.3.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: a3383785799a1d57bc50f8521650c4a6367eee8d
4
- data.tar.gz: 2a72256c267feefdd72fcd4bff71d6dccf70f59f
3
+ metadata.gz: 2e4a81e5d2a007320dd5fe508cfd8f28e0136265
4
+ data.tar.gz: dcedbd0e7fee34467acf974839bf0cd715a1cf6b
5
5
  SHA512:
6
- metadata.gz: f2ef93f982daa6ccde5d204a86205198d0ac68802e3a5bad0422e4b966fe91fee83a2b896fd4fe6da93a139293fc9cebf5f4b104b41bd40f946729e05964f390
7
- data.tar.gz: 576b13337d8dbccb574e295908725ca0ccd66ac9b274f774e709a095a689887e0a31c868a4fc57df1702178d60e3a4b2231903f2a0816a26b36f0ac1af4e9852
6
+ metadata.gz: e5e46eda4b6c84f40fd1f7183a2ebafd5ec1cdc4c454366c73e6228f5af17975e4e79a5e438cd46a2c39cc710b0af903f289a388b3eb0a4c50934496e48aa658
7
+ data.tar.gz: 91e93335743a1d73742d3ad98101ffa0dfd8a00e5db9a00f593d5e53df69b018308c82b04f533bae1d433e22a5888cb6e003c847e1d8f58cede0c038578488b6
data/README.md CHANGED
@@ -32,22 +32,22 @@ require 'papirus'
32
32
  display = PaPiRus::Display.new()
33
33
  ```
34
34
 
35
- # Playing with RMagic
35
+ # Playing with Chunky_PNG
36
36
 
37
- ```ruby
38
- require 'rmagick'
37
+ First install chunky_png
39
38
 
40
- img = Magick::Image::read('/path/to/img/file.(png|jpg/etc')[0]
41
- # we have to translate it to a 2 bit grayscale as that is what our PaPiRus understands
42
- display.show(img.resize_to_fit(display.width, display.height).quantize(2, Magick::GRAYColorspace).to_blob())
39
+ ```bash
40
+ $ (OSX) brew install chunky_png
41
+ $ (debian/ubuntu) sudo apt-get install chunky_png
42
+ $ (Windows) no idea (did not use windows for 20 year, yes that is possible)
43
+ $ gem install chunky_png
43
44
  ```
44
45
 
45
- # Playing with Chunky_PNG
46
+ The, start an irb session to play around
46
47
  ```ruby
47
- git clone https://github.com/mmolhoek/papirus
48
48
  irb
49
49
  require 'papirus'
50
- require_relative 'lib/chunky' # add's to_bit_stream function to chucky
50
+ require 'papirus/chunky' # add's to_bit_stream function to chucky
51
51
 
52
52
  #lets get a clean png of the size of the display to play with using chunky_png
53
53
  image = ChunkyPNG::Image.new(display.width, display.height, ChunkyPNG::Color::WHITE)
@@ -94,11 +94,52 @@ Partial update:
94
94
 
95
95
  ```display.show(image.to_bit_stream, 'P')```
96
96
 
97
- ## Load an image from a png file
97
+ ## Load an image from a png file with convert and chunky
98
+
99
+ First, let's use Image Magick's `convert` tool to convert any image into a b/w image the way the diplay likes it
100
+ ```bash
101
+ convert in.jpg -resize '264x176' -gravity center -extent '264x176' -colorspace gray -colors 2 -type bilevel out.png
102
+ ```
103
+
104
+ Where
105
+ * the -resize scales the image to fit the display
106
+ * The -gravity and -extent combination (order is important!) makes sure the image stays at the size of the display and in the centre
107
+ * The -colorspace -colors -type combi makes the image a 1-bit grayscale b/w image
108
+
109
+ Then we use chucky with our extension to show
98
110
 
99
111
  ```ruby
100
- image = ChunkyPNG::Image.from_file('/some/png/file/path.png')
101
- display.show(encode_png_pixels_to_scanline_grayscale_1bit(pixels))
112
+ irb
113
+ require 'papirus'
114
+ require 'papirus/chunky'
115
+ display = PaPiRus::Display.new()
116
+ image = ChunkyPNG::Image.from_file('out.png')
117
+ display.show(image.to_bit_stream(true))
118
+ ```
119
+ result:
120
+ ![that's me](https://raw.githubusercontent.com/mmolhoek/papirus/master/example_output.jpg)
121
+
122
+ # Playing with RMagic (does not work yet), did not figure out right command
123
+
124
+ First install rmagick
125
+
126
+ ```bash
127
+ $ # install native Image Magick library
128
+ $ (OSX) brew install imagemagick@6 && brew link imagemagick@6 --force
129
+ $ (debian/ubuntu) sudo apt-get install imagemagick
130
+ $ (Windows) no idea (did not use windows for 20 year, yes that is possible)
131
+ $ # install the gem that talks to the native Image Magick library
132
+ $ gem install rmagick
133
+ ```
134
+
135
+ The, start an irb session to play around
136
+ ```ruby
137
+ require 'papirus'
138
+ require 'papirus/rmagick'
139
+
140
+ display = PaPiRus::Display.new()
141
+ img = Magick::Image::read('/path/to/img/file.(png|jpg|etc').first
142
+ img.to_papirus(display)
102
143
  ```
103
144
 
104
145
  ## Testing without a PAPiRus display
@@ -1,7 +1,7 @@
1
1
  = papirus
2
2
 
3
3
  This gem can be used to communicate with the {PaPiRus}[https://github.com/PiSupply/PaPiRus] display.
4
- Checkout {GitHub}[http://github.com/mmolhoek/papirus] for examples
4
+ Checkout {GitHub}[http://github.com/mmolhoek/papirus] for examples and documentation
5
5
 
6
6
  == Contributing to papirus
7
7
 
@@ -1,6 +1,8 @@
1
1
  module PaPiRus
2
+ # The {PaPiRus::Display} can be use to send image data to the
3
+ # epd fuse driver
2
4
  class Display
3
- attr_reader :epd_path, :width, :height, :panel, :cog, :film, :auto, :allowed_commands
5
+ attr_reader :epd_path, :width, :height, :panel, :cog, :film, :auto, :allowed_commands, :display_path
4
6
  attr_accessor :rotation, :inverse, :image
5
7
 
6
8
  def initialize(epd_path: '/dev/epd', width: 200, height: 96, panel: 'EPD 2.0', cog: 0, film: 0, auto: false, inverse: false, rotation: 0)
@@ -53,6 +55,7 @@ module PaPiRus
53
55
  #and update the properties accordingly
54
56
  if File.exists?(File.join(@epd_path, 'panel'))
55
57
  info = File.read(File.join(@epd_path, 'panel'))
58
+ @display_path = File.join([@epd_path, 'LE', 'display'])
56
59
  if match = info.match(/^([A-Za-z]+\s+\d+\.\d+)\s+(\d+)x(\d+)\s+COG\s+(\d+)\s+FILM\s+(\d+)\s*$/)
57
60
  @panel, @width, @height, @cog, @film = match.captures.each_with_index.map{|val, index| index > 0 ? val.to_i : val}
58
61
  else
@@ -0,0 +1,28 @@
1
+ require 'rmagick'
2
+
3
+ class Magick::Image
4
+ # Send's any image to the PAPiRus display, if it is found
5
+ # image is rescaled to fit the display (positioning it mid center)
6
+ # @param display[PaPiRus::Display] The {PaPiRus::Display} object
7
+ def to_papirus(display)
8
+ # Resize to fit the screen
9
+ resized = resize_to_fit(display.width, display.height)
10
+ # Reduce the image to a limited number of colors for a "poster" effect, brings it donw to 4-bit 16 colors
11
+ posterized = resized.posterize(2)
12
+ #now, as the display expects a file with all pixels set, we need to extend the image to the display size
13
+ #if it is smaller in either width or height or both
14
+ if (posterize.columns != display.width or posterize.rows != display.height)
15
+ # extent fill color
16
+ posterized.background_color = "#FFFFFF"
17
+ # calculate necessary translation to center image on background
18
+ x = (posterized.columns - display.width) / 2
19
+ y = (posterized.rows - display.height) / 2
20
+ # now, 'extent' the image to the correct size with the image centered
21
+ posterized = posterized.extent(display.width, display.height, x, y)
22
+ end
23
+ # Now, make grayscale with only 2 colors, b/w, brings it down to 1-bit 2 colors
24
+ quantized = posterized.quantize(2, Magick::GRAYColorspace)
25
+ #return the raw image data
26
+ quantized.write(display.display_path){self.format='DIB'} #DIB=Device Independant Binary, as in , no headers, just raw data
27
+ end
28
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papirus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mischa Molhoek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-07 00:00:00.000000000 Z
11
+ date: 2017-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda
@@ -96,6 +96,7 @@ files:
96
96
  - README.rdoc
97
97
  - lib/papirus.rb
98
98
  - lib/papirus/chunky.rb
99
+ - lib/papirus/rmagick.rb
99
100
  homepage: http://github.com/mmolhoek/papirus
100
101
  licenses:
101
102
  - MIT
@@ -116,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
117
  version: '0'
117
118
  requirements: []
118
119
  rubyforge_project:
119
- rubygems_version: 2.5.1
120
+ rubygems_version: 2.6.13
120
121
  signing_key:
121
122
  specification_version: 4
122
123
  summary: ruby gem to access the PaPiRus display