2015-11-12 13:20:09 +00:00
|
|
|
# nativeImage
|
2014-06-23 14:58:42 +00:00
|
|
|
|
2016-04-21 22:39:12 +00:00
|
|
|
> Create tray, dock, and application icons using PNG or JPG files.
|
2016-04-21 22:35:29 +00:00
|
|
|
|
2015-08-29 04:33:45 +00:00
|
|
|
In Electron, for the APIs that take images, you can pass either file paths or
|
2016-07-22 20:42:27 +00:00
|
|
|
`NativeImage` instances. An empty image will be used when `null` is passed.
|
2014-06-23 14:58:42 +00:00
|
|
|
|
2015-08-29 04:33:45 +00:00
|
|
|
For example, when creating a tray or setting a window's icon, you can pass an
|
|
|
|
image file path as a `String`:
|
2014-06-23 14:58:42 +00:00
|
|
|
|
|
|
|
```javascript
|
2016-07-26 01:39:25 +00:00
|
|
|
const {BrowserWindow, Tray} = require('electron')
|
|
|
|
|
2016-07-22 20:47:05 +00:00
|
|
|
const appIcon = new Tray('/Users/somebody/images/icon.png')
|
|
|
|
let win = new BrowserWindow({icon: '/Users/somebody/images/window.png'})
|
2016-07-26 01:39:25 +00:00
|
|
|
console.log(appIcon, win)
|
2014-06-23 14:58:42 +00:00
|
|
|
```
|
|
|
|
|
2015-11-12 13:20:09 +00:00
|
|
|
Or read the image from the clipboard which returns a `nativeImage`:
|
2014-06-23 14:58:42 +00:00
|
|
|
|
2015-02-12 05:52:28 +00:00
|
|
|
```javascript
|
2016-07-26 01:39:25 +00:00
|
|
|
const {clipboard, Tray} = require('electron')
|
2016-07-22 20:47:05 +00:00
|
|
|
const image = clipboard.readImage()
|
|
|
|
const appIcon = new Tray(image)
|
2016-07-26 01:39:25 +00:00
|
|
|
console.log(appIcon)
|
2015-02-12 05:52:28 +00:00
|
|
|
```
|
2015-01-03 03:15:09 +00:00
|
|
|
|
2015-09-01 23:21:29 +00:00
|
|
|
## Supported Formats
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2015-09-01 23:21:29 +00:00
|
|
|
Currently `PNG` and `JPEG` image formats are supported. `PNG` is recommended
|
|
|
|
because of its support for transparency and lossless compression.
|
2015-08-08 16:08:09 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
On Windows, you can also load `ICO` icons from file paths. For best visual
|
2016-08-01 11:13:40 +00:00
|
|
|
quality it is recommended to include at least the following sizes in the:
|
|
|
|
|
|
|
|
* Small icon
|
|
|
|
* 16x16 (100% DPI scale)
|
|
|
|
* 20x20 (125% DPI scale)
|
|
|
|
* 24x24 (150% DPI scale)
|
|
|
|
* 32x32 (200% DPI scale)
|
|
|
|
* Large icon
|
|
|
|
* 32x32 (100% DPI scale)
|
|
|
|
* 40x40 (125% DPI scale)
|
|
|
|
* 48x48 (150% DPI scale)
|
|
|
|
* 64x64 (200% DPI scale)
|
2016-05-20 10:58:47 +00:00
|
|
|
* 256x256
|
2014-06-23 14:58:42 +00:00
|
|
|
|
2016-08-01 11:13:40 +00:00
|
|
|
Check the *Size requirements* section in [this article][icons].
|
|
|
|
|
|
|
|
[icons]:https://msdn.microsoft.com/en-us/library/windows/desktop/dn742485(v=vs.85).aspx
|
|
|
|
|
2015-09-01 23:21:29 +00:00
|
|
|
## High Resolution Image
|
2014-06-23 14:58:42 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
On platforms that have high-DPI support such as Apple Retina displays, you can
|
|
|
|
append `@2x` after image's base filename to mark it as a high resolution image.
|
2014-06-23 14:58:42 +00:00
|
|
|
|
2015-08-29 04:33:45 +00:00
|
|
|
For example if `icon.png` is a normal image that has standard resolution, then
|
2015-09-01 23:21:29 +00:00
|
|
|
`icon@2x.png` will be treated as a high resolution image that has double DPI
|
2015-05-23 20:00:09 +00:00
|
|
|
density.
|
2014-08-06 03:20:00 +00:00
|
|
|
|
2015-08-31 03:52:46 +00:00
|
|
|
If you want to support displays with different DPI densities at the same time,
|
|
|
|
you can put images with different sizes in the same folder and use the filename
|
|
|
|
without DPI suffixes. For example:
|
2014-08-06 03:20:00 +00:00
|
|
|
|
|
|
|
```text
|
|
|
|
images/
|
|
|
|
├── icon.png
|
|
|
|
├── icon@2x.png
|
|
|
|
└── icon@3x.png
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
2016-07-26 01:39:25 +00:00
|
|
|
const {Tray} = require('electron')
|
2016-07-22 20:47:05 +00:00
|
|
|
let appIcon = new Tray('/Users/somebody/images/icon.png')
|
2016-07-26 01:39:25 +00:00
|
|
|
console.log(appIcon)
|
2014-08-06 03:20:00 +00:00
|
|
|
```
|
|
|
|
|
2015-08-31 03:52:46 +00:00
|
|
|
Following suffixes for DPI are also supported:
|
2014-08-06 03:20:00 +00:00
|
|
|
|
|
|
|
* `@1x`
|
|
|
|
* `@1.25x`
|
|
|
|
* `@1.33x`
|
|
|
|
* `@1.4x`
|
|
|
|
* `@1.5x`
|
|
|
|
* `@1.8x`
|
|
|
|
* `@2x`
|
|
|
|
* `@2.5x`
|
|
|
|
* `@3x`
|
2015-01-03 03:15:09 +00:00
|
|
|
* `@4x`
|
|
|
|
* `@5x`
|
|
|
|
|
2015-08-29 04:33:45 +00:00
|
|
|
## Template Image
|
2015-01-03 03:15:09 +00:00
|
|
|
|
|
|
|
Template images consist of black and clear colors (and an alpha channel).
|
|
|
|
Template images are not intended to be used as standalone images and are usually
|
|
|
|
mixed with other content to create the desired final appearance.
|
|
|
|
|
2015-08-31 03:52:46 +00:00
|
|
|
The most common case is to use template images for a menu bar icon so it can
|
|
|
|
adapt to both light and dark menu bars.
|
2015-01-03 03:15:09 +00:00
|
|
|
|
2016-06-18 13:26:26 +00:00
|
|
|
**Note:** Template image is only supported on macOS.
|
2015-01-03 03:15:09 +00:00
|
|
|
|
2015-08-29 04:33:45 +00:00
|
|
|
To mark an image as a template image, its filename should end with the word
|
2015-08-31 03:52:46 +00:00
|
|
|
`Template`. For example:
|
2014-08-06 03:20:00 +00:00
|
|
|
|
2015-01-03 03:15:09 +00:00
|
|
|
* `xxxTemplate.png`
|
|
|
|
* `xxxTemplate@2x.png`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2015-08-29 04:33:45 +00:00
|
|
|
## Methods
|
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
The `nativeImage` module has the following methods, all of which return
|
|
|
|
an instance of the `NativeImage` class:
|
2015-08-29 04:33:45 +00:00
|
|
|
|
2015-11-12 13:20:09 +00:00
|
|
|
### `nativeImage.createEmpty()`
|
2015-02-12 05:55:45 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `NativeImage`
|
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
Creates an empty `NativeImage` instance.
|
2015-02-12 05:55:45 +00:00
|
|
|
|
2015-11-12 13:20:09 +00:00
|
|
|
### `nativeImage.createFromPath(path)`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2015-02-12 07:38:16 +00:00
|
|
|
* `path` String
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `NativeImage`
|
|
|
|
|
2016-09-21 17:48:01 +00:00
|
|
|
Creates a new `NativeImage` instance from a file located at `path`. This method
|
|
|
|
returns an empty image if the `path` does not exist, cannot be read, or is not
|
|
|
|
a valid image.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-06-08 16:34:45 +00:00
|
|
|
```javascript
|
2016-07-26 01:39:25 +00:00
|
|
|
const nativeImage = require('electron').nativeImage
|
|
|
|
|
2016-07-22 20:47:05 +00:00
|
|
|
let image = nativeImage.createFromPath('/Users/somebody/images/icon.png')
|
2016-07-26 01:39:25 +00:00
|
|
|
console.log(image)
|
2016-06-08 16:34:45 +00:00
|
|
|
```
|
|
|
|
|
2015-11-12 13:20:09 +00:00
|
|
|
### `nativeImage.createFromBuffer(buffer[, scaleFactor])`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
|
|
|
* `buffer` [Buffer][buffer]
|
2015-08-29 04:33:45 +00:00
|
|
|
* `scaleFactor` Double (optional)
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `NativeImage`
|
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
Creates a new `NativeImage` instance from `buffer`. The default `scaleFactor` is
|
2015-08-29 04:33:45 +00:00
|
|
|
1.0.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2015-11-13 08:03:40 +00:00
|
|
|
### `nativeImage.createFromDataURL(dataURL)`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2015-11-13 08:03:40 +00:00
|
|
|
* `dataURL` String
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
Creates a new `NativeImage` instance from `dataURL`.
|
|
|
|
|
|
|
|
## Class: NativeImage
|
|
|
|
|
2016-08-22 21:11:03 +00:00
|
|
|
> Natively wrap images such as tray, dock, and application icons.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
### Instance Methods
|
2015-08-29 04:33:45 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
The following methods are available on instances of the `NativeImage` class:
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.toPNG()`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Buffer` - A [Buffer][buffer] that contains the image's `PNG` encoded data.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.toJPEG(quality)`
|
2015-02-12 07:38:16 +00:00
|
|
|
|
2015-12-18 03:12:07 +00:00
|
|
|
* `quality` Integer (**required**) - Between 0 - 100.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Buffer` - A [Buffer][buffer] that contains the image's `JPEG` encoded data.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-08-01 00:14:45 +00:00
|
|
|
#### `image.toBitmap()`
|
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Buffer` - A [Buffer][buffer] that contains a copy of the image's raw bitmap pixel
|
2016-08-05 08:55:57 +00:00
|
|
|
data.
|
2016-08-01 00:14:45 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.toDataURL()`
|
2015-02-12 07:38:16 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `String` - The data URL of the image.
|
2015-02-12 07:38:16 +00:00
|
|
|
|
2016-08-04 17:45:06 +00:00
|
|
|
#### `image.getBitmap()`
|
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Buffer` - A [Buffer][buffer] that contains the image's raw bitmap pixel data.
|
2016-08-05 08:55:57 +00:00
|
|
|
|
|
|
|
The difference between `getBitmap()` and `toBitmap()` is, `getBitmap()` does not
|
|
|
|
copy the bitmap data, so you have to use the returned Buffer immediately in
|
|
|
|
current event loop tick, otherwise the data might be changed or destroyed.
|
2016-08-04 17:45:06 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.getNativeHandle()` _macOS_
|
2016-03-14 03:11:43 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Buffer` - A [Buffer][buffer] that stores C pointer to underlying native handle of
|
2016-06-18 13:26:26 +00:00
|
|
|
the image. On macOS, a pointer to `NSImage` instance would be returned.
|
2016-03-14 03:11:43 +00:00
|
|
|
|
2016-03-17 12:55:02 +00:00
|
|
|
Notice that the returned pointer is a weak pointer to the underlying native
|
|
|
|
image instead of a copy, so you _must_ ensure that the associated
|
|
|
|
`nativeImage` instance is kept around.
|
2016-03-14 03:11:43 +00:00
|
|
|
|
2016-10-04 20:20:42 +00:00
|
|
|
[buffer]: https://nodejs.org/api/buffer.html#buffer_class_buffer
|
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.isEmpty()`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Boolean` - Whether the image is empty.
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.getSize()`
|
2015-02-12 05:52:28 +00:00
|
|
|
|
2016-10-04 20:20:42 +00:00
|
|
|
Returns `Object`:
|
|
|
|
* `width` Integer
|
|
|
|
* `height` Integer
|
2015-04-08 08:20:03 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.setTemplateImage(option)`
|
2015-04-08 08:20:03 +00:00
|
|
|
|
|
|
|
* `option` Boolean
|
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
Marks the image as a template image.
|
2015-07-29 03:48:40 +00:00
|
|
|
|
2016-07-22 20:42:27 +00:00
|
|
|
#### `image.isTemplateImage()`
|
2015-07-29 03:48:40 +00:00
|
|
|
|
2016-09-24 23:59:30 +00:00
|
|
|
Returns `Boolean` - Whether the image is a template image.
|