mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
chore: format
This commit is contained in:
@@ -15,423 +15,511 @@ export { isFileOrResourcePath };
|
||||
|
||||
let http: typeof httpModule;
|
||||
function ensureHttp() {
|
||||
if (!http) {
|
||||
http = require("../http");
|
||||
}
|
||||
if (!http) {
|
||||
http = require("../http");
|
||||
}
|
||||
}
|
||||
|
||||
export class ImageSource implements ImageSourceDefinition {
|
||||
public android: android.graphics.Bitmap;
|
||||
public ios: UIImage;
|
||||
|
||||
get height(): number {
|
||||
if (this.ios) {
|
||||
return this.ios.size.height;
|
||||
}
|
||||
|
||||
return NaN;
|
||||
}
|
||||
|
||||
get width(): number {
|
||||
if (this.ios) {
|
||||
return this.ios.size.width;
|
||||
}
|
||||
|
||||
return NaN;
|
||||
}
|
||||
|
||||
get rotationAngle(): number {
|
||||
return NaN;
|
||||
}
|
||||
|
||||
set rotationAngle(_value: number) {
|
||||
// compatibility with Android
|
||||
}
|
||||
|
||||
constructor(nativeSource?: any) {
|
||||
if (nativeSource) {
|
||||
this.setNativeSource(nativeSource);
|
||||
}
|
||||
}
|
||||
|
||||
static fromAsset(asset: ImageAsset): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
asset.getImageAsync((image, err) => {
|
||||
if (image) {
|
||||
resolve(new ImageSource(image));
|
||||
} else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static fromUrl(url: string): Promise<ImageSource> {
|
||||
ensureHttp();
|
||||
|
||||
return http.getImage(url);
|
||||
}
|
||||
|
||||
static fromResourceSync(name: string): ImageSource {
|
||||
const nativeSource = (<any>UIImage).tns_safeImageNamed(name) || (<any>UIImage).tns_safeImageNamed(`${name}.jpg`);
|
||||
|
||||
return nativeSource ? new ImageSource(nativeSource) : null;
|
||||
}
|
||||
static fromResource(name: string): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
(<any>UIImage).tns_safeDecodeImageNamedCompletion(name, image => {
|
||||
if (image) {
|
||||
resolve(new ImageSource(image));
|
||||
} else {
|
||||
(<any>UIImage).tns_safeDecodeImageNamedCompletion(`${name}.jpg`, image => {
|
||||
resolve(new ImageSource(image));
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromFileSync(path: string): ImageSource {
|
||||
const uiImage = UIImage.imageWithContentsOfFile(getFileName(path));
|
||||
|
||||
return uiImage ? new ImageSource(uiImage) : null;
|
||||
}
|
||||
static fromFile(path: string): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
(<any>UIImage).tns_decodeImageWidthContentsOfFileCompletion(getFileName(path),
|
||||
uiImage => {
|
||||
resolve(new ImageSource(uiImage));
|
||||
});
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromFileOrResourceSync(path: string): ImageSource {
|
||||
if (!isFileOrResourcePath(path)) {
|
||||
throw new Error("Path \"" + "\" is not a valid file or resource.");
|
||||
}
|
||||
|
||||
if (path.indexOf(RESOURCE_PREFIX) === 0) {
|
||||
return ImageSource.fromResourceSync(path.substr(RESOURCE_PREFIX.length));
|
||||
}
|
||||
|
||||
return ImageSource.fromFileSync(path);
|
||||
}
|
||||
|
||||
static fromDataSync(data: any): ImageSource {
|
||||
const uiImage = UIImage.imageWithData(data);
|
||||
|
||||
return uiImage ? new ImageSource(uiImage) : null;
|
||||
}
|
||||
static fromData(data: any): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
(<any>UIImage).tns_decodeImageWithDataCompletion(data,
|
||||
uiImage => {
|
||||
resolve(new ImageSource(uiImage));
|
||||
});
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromBase64Sync(source: string): ImageSource {
|
||||
let uiImage: UIImage;
|
||||
if (typeof source === "string") {
|
||||
const data = NSData.alloc().initWithBase64EncodedStringOptions(source, NSDataBase64DecodingOptions.IgnoreUnknownCharacters);
|
||||
uiImage = UIImage.imageWithData(data);
|
||||
}
|
||||
|
||||
return uiImage ? new ImageSource(uiImage) : null;
|
||||
}
|
||||
static fromBase64(source: string): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
const data = NSData.alloc().initWithBase64EncodedStringOptions(source, NSDataBase64DecodingOptions.IgnoreUnknownCharacters);
|
||||
UIImage.imageWithData["async"](UIImage, [data]).then(
|
||||
uiImage => {
|
||||
resolve(new ImageSource(uiImage));
|
||||
});
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromFontIconCodeSync(source: string, font: Font, color: Color): ImageSource {
|
||||
font = font || Font.default;
|
||||
let fontSize = layout.toDevicePixels(font.fontSize);
|
||||
if (!fontSize) {
|
||||
// TODO: Consider making 36 font size as default for optimal look on TabView and ActionBar
|
||||
fontSize = UIFont.labelFontSize;
|
||||
}
|
||||
|
||||
const density = layout.getDisplayDensity();
|
||||
const scaledFontSize = fontSize * density;
|
||||
|
||||
const attributes = {
|
||||
[NSFontAttributeName]: font.getUIFont(UIFont.systemFontOfSize(scaledFontSize))
|
||||
};
|
||||
|
||||
if (color) {
|
||||
attributes[NSForegroundColorAttributeName] = color.ios;
|
||||
}
|
||||
|
||||
const attributedString = NSAttributedString.alloc().initWithStringAttributes(source, <NSDictionary<string, any>>attributes);
|
||||
|
||||
UIGraphicsBeginImageContextWithOptions(attributedString.size(), false, 0.0);
|
||||
attributedString.drawAtPoint(CGPointMake(0, 0));
|
||||
|
||||
const iconImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return iconImage ? new ImageSource(iconImage) : null;
|
||||
}
|
||||
|
||||
public fromAsset(asset: ImageAsset) {
|
||||
console.log("fromAsset() is deprecated. Use ImageSource.fromAsset() instead.");
|
||||
|
||||
return ImageSource.fromAsset(asset)
|
||||
.then(imgSource => {
|
||||
this.setNativeSource(imgSource.ios);
|
||||
|
||||
return this;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromResource(name: string): boolean {
|
||||
console.log("loadFromResource() is deprecated. Use ImageSource.fromResourceSync() instead.");
|
||||
|
||||
const imgSource = ImageSource.fromResourceSync(name);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromResource(name: string): Promise<boolean> {
|
||||
console.log("fromResource() is deprecated. Use ImageSource.fromResource() instead.");
|
||||
|
||||
return ImageSource.fromResource(name)
|
||||
.then(imgSource => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromFile(path: string): boolean {
|
||||
console.log("loadFromFile() is deprecated. Use ImageSource.fromFileSync() instead.");
|
||||
|
||||
const imgSource = ImageSource.fromFileSync(path);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromFile(path: string): Promise<boolean> {
|
||||
console.log("fromFile() is deprecated. Use ImageSource.fromFile() instead.");
|
||||
|
||||
return ImageSource.fromFile(path)
|
||||
.then(imgSource => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromData(data: any): boolean {
|
||||
console.log("loadFromData() is deprecated. Use ImageSource.fromDataSync() instead.");
|
||||
|
||||
const imgSource = ImageSource.fromDataSync(data);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromData(data: any): Promise<boolean> {
|
||||
console.log("fromData() is deprecated. Use ImageSource.fromData() instead.");
|
||||
|
||||
return ImageSource.fromData(data)
|
||||
.then(imgSource => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromBase64(source: string): boolean {
|
||||
console.log("loadFromBase64() is deprecated. Use ImageSource.fromBase64Sync() instead.");
|
||||
|
||||
const imgSource = ImageSource.fromBase64Sync(source);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromBase64(source: string): Promise<boolean> {
|
||||
console.log("fromBase64() is deprecated. Use ImageSource.fromBase64() instead.");
|
||||
|
||||
return ImageSource.fromBase64(source)
|
||||
.then(imgSource => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromFontIconCode(source: string, font: Font, color: Color): boolean {
|
||||
console.log("loadFromFontIconCode() is deprecated. Use ImageSource.fromFontIconCodeSync() instead.");
|
||||
|
||||
const imgSource = ImageSource.fromFontIconCodeSync(source, font, color);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public setNativeSource(source: any): void {
|
||||
if (source && !(source instanceof UIImage)) {
|
||||
throw new Error("The method setNativeSource() expects UIImage instance.");
|
||||
}
|
||||
this.ios = source;
|
||||
}
|
||||
|
||||
public saveToFile(path: string, format: "png" | "jpeg" | "jpg", quality?: number): boolean {
|
||||
if (!this.ios) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (quality) {
|
||||
quality = (quality - 0) / (100 - 0); // Normalize quality on a scale of 0 to 1
|
||||
}
|
||||
|
||||
const data = getImageData(this.ios, format, quality);
|
||||
if (data) {
|
||||
return NSFileManager.defaultManager.createFileAtPathContentsAttributes(path, data, null);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public toBase64String(format: "png" | "jpeg" | "jpg", quality?: number): string {
|
||||
let res = null;
|
||||
if (!this.ios) {
|
||||
return res;
|
||||
}
|
||||
|
||||
if (quality) {
|
||||
quality = (quality - 0) / (100 - 0); // Normalize quality on a scale of 0 to 1
|
||||
}
|
||||
|
||||
const data = getImageData(this.ios, format, quality);
|
||||
if (data) {
|
||||
res = data.base64Encoding();
|
||||
}
|
||||
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
public resize(maxSize: number, options?: any): ImageSource {
|
||||
const size: CGSize = this.ios.size;
|
||||
const dim = getScaledDimensions(
|
||||
size.width,
|
||||
size.height,
|
||||
maxSize
|
||||
);
|
||||
|
||||
const newSize: CGSize = CGSizeMake(dim.width, dim.height);
|
||||
UIGraphicsBeginImageContextWithOptions(newSize, true, this.ios.scale);
|
||||
this.ios.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height));
|
||||
|
||||
const resizedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return new ImageSource(resizedImage);
|
||||
}
|
||||
public android: android.graphics.Bitmap;
|
||||
public ios: UIImage;
|
||||
|
||||
get height(): number {
|
||||
if (this.ios) {
|
||||
return this.ios.size.height;
|
||||
}
|
||||
|
||||
return NaN;
|
||||
}
|
||||
|
||||
get width(): number {
|
||||
if (this.ios) {
|
||||
return this.ios.size.width;
|
||||
}
|
||||
|
||||
return NaN;
|
||||
}
|
||||
|
||||
get rotationAngle(): number {
|
||||
return NaN;
|
||||
}
|
||||
|
||||
set rotationAngle(_value: number) {
|
||||
// compatibility with Android
|
||||
}
|
||||
|
||||
constructor(nativeSource?: any) {
|
||||
if (nativeSource) {
|
||||
this.setNativeSource(nativeSource);
|
||||
}
|
||||
}
|
||||
|
||||
static fromAsset(asset: ImageAsset): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
asset.getImageAsync((image, err) => {
|
||||
if (image) {
|
||||
resolve(new ImageSource(image));
|
||||
} else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static fromUrl(url: string): Promise<ImageSource> {
|
||||
ensureHttp();
|
||||
|
||||
return http.getImage(url);
|
||||
}
|
||||
|
||||
static fromResourceSync(name: string): ImageSource {
|
||||
const nativeSource =
|
||||
(<any>UIImage).tns_safeImageNamed(name) ||
|
||||
(<any>UIImage).tns_safeImageNamed(`${name}.jpg`);
|
||||
|
||||
return nativeSource ? new ImageSource(nativeSource) : null;
|
||||
}
|
||||
static fromResource(name: string): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
(<any>UIImage).tns_safeDecodeImageNamedCompletion(
|
||||
name,
|
||||
(image) => {
|
||||
if (image) {
|
||||
resolve(new ImageSource(image));
|
||||
} else {
|
||||
(<any>UIImage).tns_safeDecodeImageNamedCompletion(
|
||||
`${name}.jpg`,
|
||||
(image) => {
|
||||
resolve(new ImageSource(image));
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromFileSync(path: string): ImageSource {
|
||||
const uiImage = UIImage.imageWithContentsOfFile(getFileName(path));
|
||||
|
||||
return uiImage ? new ImageSource(uiImage) : null;
|
||||
}
|
||||
static fromFile(path: string): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
(<any>UIImage).tns_decodeImageWidthContentsOfFileCompletion(
|
||||
getFileName(path),
|
||||
(uiImage) => {
|
||||
resolve(new ImageSource(uiImage));
|
||||
}
|
||||
);
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromFileOrResourceSync(path: string): ImageSource {
|
||||
if (!isFileOrResourcePath(path)) {
|
||||
throw new Error('Path "' + '" is not a valid file or resource.');
|
||||
}
|
||||
|
||||
if (path.indexOf(RESOURCE_PREFIX) === 0) {
|
||||
return ImageSource.fromResourceSync(
|
||||
path.substr(RESOURCE_PREFIX.length)
|
||||
);
|
||||
}
|
||||
|
||||
return ImageSource.fromFileSync(path);
|
||||
}
|
||||
|
||||
static fromDataSync(data: any): ImageSource {
|
||||
const uiImage = UIImage.imageWithData(data);
|
||||
|
||||
return uiImage ? new ImageSource(uiImage) : null;
|
||||
}
|
||||
static fromData(data: any): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
(<any>UIImage).tns_decodeImageWithDataCompletion(
|
||||
data,
|
||||
(uiImage) => {
|
||||
resolve(new ImageSource(uiImage));
|
||||
}
|
||||
);
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromBase64Sync(source: string): ImageSource {
|
||||
let uiImage: UIImage;
|
||||
if (typeof source === "string") {
|
||||
const data = NSData.alloc().initWithBase64EncodedStringOptions(
|
||||
source,
|
||||
NSDataBase64DecodingOptions.IgnoreUnknownCharacters
|
||||
);
|
||||
uiImage = UIImage.imageWithData(data);
|
||||
}
|
||||
|
||||
return uiImage ? new ImageSource(uiImage) : null;
|
||||
}
|
||||
static fromBase64(source: string): Promise<ImageSource> {
|
||||
return new Promise<ImageSource>((resolve, reject) => {
|
||||
try {
|
||||
const data = NSData.alloc().initWithBase64EncodedStringOptions(
|
||||
source,
|
||||
NSDataBase64DecodingOptions.IgnoreUnknownCharacters
|
||||
);
|
||||
UIImage.imageWithData["async"](UIImage, [data]).then(
|
||||
(uiImage) => {
|
||||
resolve(new ImageSource(uiImage));
|
||||
}
|
||||
);
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static fromFontIconCodeSync(
|
||||
source: string,
|
||||
font: Font,
|
||||
color: Color
|
||||
): ImageSource {
|
||||
font = font || Font.default;
|
||||
let fontSize = layout.toDevicePixels(font.fontSize);
|
||||
if (!fontSize) {
|
||||
// TODO: Consider making 36 font size as default for optimal look on TabView and ActionBar
|
||||
fontSize = UIFont.labelFontSize;
|
||||
}
|
||||
|
||||
const density = layout.getDisplayDensity();
|
||||
const scaledFontSize = fontSize * density;
|
||||
|
||||
const attributes = {
|
||||
[NSFontAttributeName]: font.getUIFont(
|
||||
UIFont.systemFontOfSize(scaledFontSize)
|
||||
),
|
||||
};
|
||||
|
||||
if (color) {
|
||||
attributes[NSForegroundColorAttributeName] = color.ios;
|
||||
}
|
||||
|
||||
const attributedString = NSAttributedString.alloc().initWithStringAttributes(
|
||||
source,
|
||||
<NSDictionary<string, any>>attributes
|
||||
);
|
||||
|
||||
UIGraphicsBeginImageContextWithOptions(
|
||||
attributedString.size(),
|
||||
false,
|
||||
0.0
|
||||
);
|
||||
attributedString.drawAtPoint(CGPointMake(0, 0));
|
||||
|
||||
const iconImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return iconImage ? new ImageSource(iconImage) : null;
|
||||
}
|
||||
|
||||
public fromAsset(asset: ImageAsset) {
|
||||
console.log(
|
||||
"fromAsset() is deprecated. Use ImageSource.fromAsset() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromAsset(asset).then((imgSource) => {
|
||||
this.setNativeSource(imgSource.ios);
|
||||
|
||||
return this;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromResource(name: string): boolean {
|
||||
console.log(
|
||||
"loadFromResource() is deprecated. Use ImageSource.fromResourceSync() instead."
|
||||
);
|
||||
|
||||
const imgSource = ImageSource.fromResourceSync(name);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromResource(name: string): Promise<boolean> {
|
||||
console.log(
|
||||
"fromResource() is deprecated. Use ImageSource.fromResource() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromResource(name).then((imgSource) => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromFile(path: string): boolean {
|
||||
console.log(
|
||||
"loadFromFile() is deprecated. Use ImageSource.fromFileSync() instead."
|
||||
);
|
||||
|
||||
const imgSource = ImageSource.fromFileSync(path);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromFile(path: string): Promise<boolean> {
|
||||
console.log(
|
||||
"fromFile() is deprecated. Use ImageSource.fromFile() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromFile(path).then((imgSource) => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromData(data: any): boolean {
|
||||
console.log(
|
||||
"loadFromData() is deprecated. Use ImageSource.fromDataSync() instead."
|
||||
);
|
||||
|
||||
const imgSource = ImageSource.fromDataSync(data);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromData(data: any): Promise<boolean> {
|
||||
console.log(
|
||||
"fromData() is deprecated. Use ImageSource.fromData() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromData(data).then((imgSource) => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromBase64(source: string): boolean {
|
||||
console.log(
|
||||
"loadFromBase64() is deprecated. Use ImageSource.fromBase64Sync() instead."
|
||||
);
|
||||
|
||||
const imgSource = ImageSource.fromBase64Sync(source);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public fromBase64(source: string): Promise<boolean> {
|
||||
console.log(
|
||||
"fromBase64() is deprecated. Use ImageSource.fromBase64() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromBase64(source).then((imgSource) => {
|
||||
this.ios = imgSource.ios;
|
||||
|
||||
return !!this.ios;
|
||||
});
|
||||
}
|
||||
|
||||
public loadFromFontIconCode(
|
||||
source: string,
|
||||
font: Font,
|
||||
color: Color
|
||||
): boolean {
|
||||
console.log(
|
||||
"loadFromFontIconCode() is deprecated. Use ImageSource.fromFontIconCodeSync() instead."
|
||||
);
|
||||
|
||||
const imgSource = ImageSource.fromFontIconCodeSync(source, font, color);
|
||||
this.ios = imgSource ? imgSource.ios : null;
|
||||
|
||||
return !!this.ios;
|
||||
}
|
||||
|
||||
public setNativeSource(source: any): void {
|
||||
if (source && !(source instanceof UIImage)) {
|
||||
throw new Error(
|
||||
"The method setNativeSource() expects UIImage instance."
|
||||
);
|
||||
}
|
||||
this.ios = source;
|
||||
}
|
||||
|
||||
public saveToFile(
|
||||
path: string,
|
||||
format: "png" | "jpeg" | "jpg",
|
||||
quality?: number
|
||||
): boolean {
|
||||
if (!this.ios) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (quality) {
|
||||
quality = (quality - 0) / (100 - 0); // Normalize quality on a scale of 0 to 1
|
||||
}
|
||||
|
||||
const data = getImageData(this.ios, format, quality);
|
||||
if (data) {
|
||||
return NSFileManager.defaultManager.createFileAtPathContentsAttributes(
|
||||
path,
|
||||
data,
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public toBase64String(
|
||||
format: "png" | "jpeg" | "jpg",
|
||||
quality?: number
|
||||
): string {
|
||||
let res = null;
|
||||
if (!this.ios) {
|
||||
return res;
|
||||
}
|
||||
|
||||
if (quality) {
|
||||
quality = (quality - 0) / (100 - 0); // Normalize quality on a scale of 0 to 1
|
||||
}
|
||||
|
||||
const data = getImageData(this.ios, format, quality);
|
||||
if (data) {
|
||||
res = data.base64Encoding();
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public resize(maxSize: number, options?: any): ImageSource {
|
||||
const size: CGSize = this.ios.size;
|
||||
const dim = getScaledDimensions(size.width, size.height, maxSize);
|
||||
|
||||
const newSize: CGSize = CGSizeMake(dim.width, dim.height);
|
||||
UIGraphicsBeginImageContextWithOptions(newSize, true, this.ios.scale);
|
||||
this.ios.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height));
|
||||
|
||||
const resizedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return new ImageSource(resizedImage);
|
||||
}
|
||||
}
|
||||
|
||||
function getFileName(path: string): string {
|
||||
let fileName = typeof path === "string" ? path.trim() : "";
|
||||
if (fileName.indexOf("~/") === 0) {
|
||||
fileName = fsPath.join(knownFolders.currentApp().path, fileName.replace("~/", ""));
|
||||
}
|
||||
let fileName = typeof path === "string" ? path.trim() : "";
|
||||
if (fileName.indexOf("~/") === 0) {
|
||||
fileName = fsPath.join(
|
||||
knownFolders.currentApp().path,
|
||||
fileName.replace("~/", "")
|
||||
);
|
||||
}
|
||||
|
||||
return fileName;
|
||||
return fileName;
|
||||
}
|
||||
|
||||
function getImageData(instance: UIImage, format: "png" | "jpeg" | "jpg", quality = 0.9): NSData {
|
||||
let data = null;
|
||||
switch (format) {
|
||||
case "png":
|
||||
data = UIImagePNGRepresentation(instance);
|
||||
break;
|
||||
case "jpeg":
|
||||
case "jpg":
|
||||
data = UIImageJPEGRepresentation(instance, quality);
|
||||
break;
|
||||
}
|
||||
function getImageData(
|
||||
instance: UIImage,
|
||||
format: "png" | "jpeg" | "jpg",
|
||||
quality = 0.9
|
||||
): NSData {
|
||||
let data = null;
|
||||
switch (format) {
|
||||
case "png":
|
||||
data = UIImagePNGRepresentation(instance);
|
||||
break;
|
||||
case "jpeg":
|
||||
case "jpg":
|
||||
data = UIImageJPEGRepresentation(instance, quality);
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
return data;
|
||||
}
|
||||
|
||||
export function fromAsset(asset: ImageAsset): Promise<ImageSource> {
|
||||
console.log("fromAsset() is deprecated. Use ImageSource.fromAsset() instead.");
|
||||
console.log(
|
||||
"fromAsset() is deprecated. Use ImageSource.fromAsset() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromAsset(asset);
|
||||
return ImageSource.fromAsset(asset);
|
||||
}
|
||||
|
||||
export function fromResource(name: string): ImageSource {
|
||||
console.log("fromResource() is deprecated. Use ImageSource.fromResourceSync() instead.");
|
||||
console.log(
|
||||
"fromResource() is deprecated. Use ImageSource.fromResourceSync() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromResourceSync(name);
|
||||
return ImageSource.fromResourceSync(name);
|
||||
}
|
||||
|
||||
export function fromFile(path: string): ImageSource {
|
||||
console.log("fromFile() is deprecated. Use ImageSource.fromFileSync() instead.");
|
||||
console.log(
|
||||
"fromFile() is deprecated. Use ImageSource.fromFileSync() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromFileSync(path);
|
||||
return ImageSource.fromFileSync(path);
|
||||
}
|
||||
|
||||
export function fromData(data: any): ImageSource {
|
||||
console.log("fromData() is deprecated. Use ImageSource.fromDataSync() instead.");
|
||||
console.log(
|
||||
"fromData() is deprecated. Use ImageSource.fromDataSync() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromDataSync(data);
|
||||
return ImageSource.fromDataSync(data);
|
||||
}
|
||||
|
||||
export function fromFontIconCode(source: string, font: Font, color: Color): ImageSource {
|
||||
console.log("fromFontIconCode() is deprecated. Use ImageSource.fromFontIconCodeSync() instead.");
|
||||
export function fromFontIconCode(
|
||||
source: string,
|
||||
font: Font,
|
||||
color: Color
|
||||
): ImageSource {
|
||||
console.log(
|
||||
"fromFontIconCode() is deprecated. Use ImageSource.fromFontIconCodeSync() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromFontIconCodeSync(source, font, color);
|
||||
return ImageSource.fromFontIconCodeSync(source, font, color);
|
||||
}
|
||||
|
||||
export function fromBase64(source: string): ImageSource {
|
||||
console.log("fromBase64() is deprecated. Use ImageSource.fromBase64Sync() instead.");
|
||||
console.log(
|
||||
"fromBase64() is deprecated. Use ImageSource.fromBase64Sync() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromBase64Sync(source);
|
||||
return ImageSource.fromBase64Sync(source);
|
||||
}
|
||||
|
||||
export function fromNativeSource(nativeSource: any): ImageSource {
|
||||
console.log("fromNativeSource() is deprecated. Use ImageSource constructor instead.");
|
||||
console.log(
|
||||
"fromNativeSource() is deprecated. Use ImageSource constructor instead."
|
||||
);
|
||||
|
||||
return new ImageSource(nativeSource);
|
||||
return new ImageSource(nativeSource);
|
||||
}
|
||||
|
||||
export function fromUrl(url: string): Promise<ImageSourceDefinition> {
|
||||
console.log("fromUrl() is deprecated. Use ImageSource.fromUrl() instead.");
|
||||
console.log("fromUrl() is deprecated. Use ImageSource.fromUrl() instead.");
|
||||
|
||||
return ImageSource.fromUrl(url);
|
||||
return ImageSource.fromUrl(url);
|
||||
}
|
||||
|
||||
export function fromFileOrResource(path: string): ImageSource {
|
||||
console.log("fromFileOrResource() is deprecated. Use ImageSource.fromFileOrResourceSync() instead.");
|
||||
console.log(
|
||||
"fromFileOrResource() is deprecated. Use ImageSource.fromFileOrResourceSync() instead."
|
||||
);
|
||||
|
||||
return ImageSource.fromFileOrResourceSync(path);
|
||||
return ImageSource.fromFileOrResourceSync(path);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user