# Titanium.Blob

> A container for binary data.

- Source: https://titaniumsdk.com/docs/sdk/13.3.1/Titanium.Blob
- Titanium SDK version: 13.3.1
- Kind: proxy
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK iPhone 0.9, iPad 0.9, Android 0.9, macOS 9.2.0
- Extends: Titanium.Proxy
- Inheritance: Titanium.Proxy

A `Blob` represents a chunk of binary information, often obtained through
an [HTTPClient](https://titaniumsdk.com/docs/sdk/Titanium.Network.HTTPClient.md) or by reading a [File](https://titaniumsdk.com/docs/sdk/Titanium.Filesystem.File.md).

Blobs are often used to store text or image data.
The `Blob` object includes a number of properties and methods specific to image blobs.

Android supports an [append](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#append) method, but
otherwise blobs are immutable.

The [Titanium.Utils](https://titaniumsdk.com/docs/sdk/Titanium.Utils.md) module provides several utility methods for working with
blobs, including methods for converting between blobs and Base64-encoded strings,
and methods for generating SHA-1 and SHA-256 hashes and MD5 digests from blob data.

The [Buffer](https://titaniumsdk.com/docs/sdk/Titanium.Buffer.md) object can also contain binary data, and is
more easily mutable. Extracting blob data to a buffer is somewhat roundabout:

``` js
var blobStream = Ti.Stream.createStream({ source: myBlob, mode: Ti.Stream.MODE_READ });
var newBuffer = Ti.createBuffer({ length: myBlob.length });
var bytes = blobStream.read(newBuffer);
```

Creating a blob from a buffer is much easier:
``` js
var newBlob = myBuffer.toBlob();
```

In both cases, the conversion involves copying the data from one object to another, so
you should be conscious of the amount of the data being copied.

## Properties

### file

- Type: Titanium.Filesystem.File
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

File object represented by this blob, or `null` if this blob is not
associated with a file.

### height

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

If this blob represents an image, this is the height of the image in pixels.

If this blob doesn't represent an image, `height` is reported as 0.

**NOTE 1**: On SDK versions prior to 9.1.0, Ti.Blob images may have reported in points, not pixels.
This would occur for images with a higher density/scale returned by [Titanium.UI.View.toImage](https://titaniumsdk.com/docs/sdk/Titanium.UI.View.md#toImage) or images with `@dx` density suffixes.
You may multiply by [Titanium.Platform.DisplayCaps.logicalDensityFactor](https://titaniumsdk.com/docs/sdk/Titanium.Platform.DisplayCaps.md#logicalDensityFactor) to try and determine the pixels, but this value may be off for some pixel/density combinations.
(e.g. a `10px` image would report as `3` on a `3x` density screen, so multiplying would give you `9` pixels, which is still incorrect)

**NOTE 2**: This represents the height the platform decodes the image to in memory. iOS will automatically
rotate a JPEG based on its EXIF orientation when loaded into memory, but Android does not and instead
rotates it when shown on-screen. You can read the [uprightHeight](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#uprightHeight) to determine
what the image height will be after rotation, if applicable.

### length

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

Length of this blob in bytes.

### mimeType

- Type: String
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

Mime type of the data in this blob.

### nativePath

- Type: String
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

If this blob represents a [File](https://titaniumsdk.com/docs/sdk/Titanium.Filesystem.File.md), this is the file URL
that represents it.

If this blob doesn't represent a file, the value of `nativePath` is `null`.

### rotation

- Type: Number
- Platforms: Android
- Since: Titanium SDK 12.3.0
- Permission: read-only

EXIF rotation of the image if available. Can be `undefined` if no orientation was found.

### size

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 7.2.0, iPhone 0.9.0, iPad 0.9.0, macOS 9.2.0
- Permission: read-only

Size of the blob in pixels (for image blobs) or bytes (for all other blobs).

If this blob represents an image, this is the total number of pixels in the image.
Otherwise it returns the number of bytes in the binary data.

### text

- Type: String
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

UTF-8 string representation of the data in this blob.

If this blob represents pure binary data, the value will be `null`.

### uprightHeight

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 9.2.0
- Permission: read-only

If the blob references an image, this provides the height in pixels after factoring in EXIF orientation.

The height of the image in pixels after rotating/flipping it based on its EXIF orientation,
which is commonly the case with JPEGs. Will return the save value as the [height](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#height)
property if image does not have an EXIF orientation or if the orientation is already upright.

On iOS, properties [height](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#height) and [uprightHeight](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#uprightHeight) will always match.
On Android, these properties may differ when loading a JPEG since this platform does not automatically
rotate the loaded image in memory, but it is rotated when displaying it on-screen.

### uprightWidth

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 9.2.0
- Permission: read-only

If the blob references an image, this provides the width in pixels after factoring in EXIF orientation.

The width of the image in pixels after rotating/flipping it based on its EXIF orientation,
which is commonly the case with JPEGs. Will return the save value as the [width](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#width)
property if image does not have an EXIF orientation or if the orientation is already upright.

On iOS, properties [width](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#width) and [uprightWidth](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#uprightWidth) will always match.
On Android, these properties may differ when loading a JPEG since this platform does not automatically
rotate the loaded image in memory, but it is rotated when displaying it on-screen.

### width

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

If this blob represents an image, this is the width of the image in pixels.

If this blob doesn't represent an image, `width` is reported as 0.

**NOTE 1**: On SDK versions prior to 9.1.0, Ti.Blob images may have reported in points, not pixels.
This would occur for images with a higher density/scale returned by [Titanium.UI.View.toImage](https://titaniumsdk.com/docs/sdk/Titanium.UI.View.md#toImage) or images with `@dx` density suffixes.
You may multiply by [Titanium.Platform.DisplayCaps.logicalDensityFactor](https://titaniumsdk.com/docs/sdk/Titanium.Platform.DisplayCaps.md#logicalDensityFactor) to try and determine the pixels, but this value may be off for some pixel/density combinations.
(e.g. a `10px` image would report as `3` on a `3x` density screen, so multiplying would give you `9` pixels, which is still incorrect)

**NOTE 2**: This represents the width the platform decodes the image to in memory. iOS will automatically
rotate a JPEG based on its EXIF orientation when loaded into memory, but Android does not and instead
rotates it when shown on-screen. You can read the [uprightWidth](https://titaniumsdk.com/docs/sdk/Titanium.Blob.md#uprightWidth) to determine
what the image width will be after rotation, if applicable.

## Methods

### append

- Platforms: Android

Appends the data from another blob to this blob.

Parameters:

- `blob` (Titanium.Blob): Blob to append to this blob.

### arrayBuffer

- Platforms: Android, iPhone, iPad, macOS

Returns a `Promise` that resolves with the contents of the blob as binary data contained in an `ArrayBuffer`.

Returns: Promise<ArrayBuffer>

### imageAsCompressed

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK iPhone 6.1.0, iPad 6.1.0, Android 6.1.0, macOS 9.2.0

Creates a new blob by compressing the underlying image to the specified quality.

Returns the compressed image as a blob.

If this blob doesn't represent an image, returns `null`.

Parameters:

- `quality` (Number): Quality to compress this image to. From 0.0 (lowest quality) to 1.0 (highest quality).

Returns: Titanium.Blob - Compressed image as a blob.

### imageAsCropped

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.0.0, macOS 9.2.0

Creates a new blob by cropping the underlying image to the specified dimensions.

Returns the cropped image as a blob.

If this blob doesn't represent an image, returns `null`.

Parameters:

- `options` (Dimension): Image cropping options. [Dimension](https://titaniumsdk.com/docs/sdk/Dimension.md) properties are all optional for this use case. Defaults will be to use the current image's `height`/`width` and to center the cropped rectangle horizontally/vertically on the original image (`x`/`y`).

Returns: Titanium.Blob - Cropped image as a blob.

### imageAsResized

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.0.0, macOS 9.2.0

Creates a new blob by resizing and scaling the underlying image to the specified dimensions.

Returns the resized image as a blob.

If this blob doesn't represent an image, returns `null`.

Parameters:

- `width` (Number): Width to resize this image to.
- `height` (Number): Height to resize this image to.

Returns: Titanium.Blob - Resized image as a blob.

### imageAsThumbnail

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.0.0, macOS 9.2.0

Returns a thumbnail version of the underlying image, optionally with a border and rounded corners.

Returns the thumbnail image as a blob.

If this blob doesn't represent an image, returns `null`.

The final height/width of the image will actually be `size + (2 * borderSize)` as the border is added around the image.
By default the `borderSize` is `1`.

Parameters:

- `size` (Number): Size of the thumbnail, in either width or height.
- `borderSize` (Number, optional): Width of the thumbnail's border. Default: `1`.
- `cornerRadius` (Number, optional): Radius of the thumbnail's corners. Default: `0`.

Returns: Titanium.Blob - The image thumbnail in a blob.

### imageWithAlpha

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.0.0, macOS 9.2.0

Returns a copy of the underlying image with an added alpha channel.

Returns the new image as a blob, or `null` if this blob is not an image.

Returns: Titanium.Blob - The image with an alpha channel in a blob, or `null` if this blob is not an image.

### imageWithRoundedCorner

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.0.0, macOS 9.2.0

Returns a copy of the underlying image with rounded corners added.

Returns the new image as a blob, or `null` if this blob is not an image.
The image will grow in height and width by `(2 * borderSize)` as the border is added around the image to avoid scaling.
By default the `borderSize` is `1`.

Parameters:

- `cornerSize` (Number): Size of the rounded corners in pixels.
- `borderSize` (Number, optional): Width of the border in pixels. Default: `1`.

Returns: Titanium.Blob - Image with a rounded corner in a blob, or `null` if this blob is not an image.

### imageWithTransparentBorder

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.0.0, macOS 9.2.0

Returns a copy of the underlying image with an added transparent border.

Returns the new image as a blob, or `null` if this blob is not an image.
The image will grow in height and width by `(2 * borderSize)` as the border is added around the image to avoid scaling.

Parameters:

- `size` (Number): Width of the transparent border in pixels.

Returns: Titanium.Blob - The image with a transparent border in a blob, or `null` if this blob is not an image.

### toArrayBuffer

- Platforms: Android, iPhone, iPad, macOS

Returns an `ArrayBuffer` representation of this blob.

Returns: ArrayBuffer

### toString

- Platforms: Android, iPhone, iPad, macOS

Returns a string representation of this blob.

Returns: String

## Inherited members

7 members are inherited. Each is documented on the type that declares it.

- [Titanium.Proxy](https://titaniumsdk.com/docs/sdk/13.3.1/Titanium.Proxy.md): `addEventListener`, `apiName`, `applyProperties`, `bubbleParent`, `fireEvent`, `lifecycleContainer`, `removeEventListener`

---

- This corpus documents Titanium SDK 13.4.1. Anything here that does not name a version describes 13.4.1.
- Titanium is maintained by TiDev. The Appcelerator toolchain is retired: there is no `appc` CLI, no Appcelerator Studio and no hosted build service. The supported CLI is `titanium` on npm, invoked as `ti`.

