diff --git a/tests/app/image-source/image-source-tests.ts b/tests/app/image-source/image-source-tests.ts index 94a52ee2c..352a4d4a3 100644 --- a/tests/app/image-source/image-source-tests.ts +++ b/tests/app/image-source/image-source-tests.ts @@ -54,6 +54,15 @@ export function testSaveToFile() { TKUnit.assert(fs.File.exists(path), "Image not saved to file"); } +export function testSaveToFile_WithQuality() { + const img = imageSource.fromFile(imagePath); + const folder = fs.knownFolders.documents(); + const path = fs.path.join(folder.path, "test.png"); + const saved = img.saveToFile(path, "png", 70); + TKUnit.assert(saved, "Image not saved to file"); + TKUnit.assert(fs.File.exists(path), "Image not saved to file"); +} + export function testFromFile() { // >> imagesource-load-local const folder = fs.knownFolders.documents(); @@ -187,6 +196,16 @@ export function testBase64Encode_PNG() { "Base 64 encoded PNG"); } +export function testBase64Encode_PNG_WithQuality() { + const img = imageSource.fromFile(smallImagePath); + let base64String = img.toBase64String("png", 80); + base64String = base64String.substr(0, expectedPngStart.length); + TKUnit.assertEqual( + base64String, + expectedPngStart, + "Base 64 encoded PNG"); +} + export function testBase64Encode_JPEG() { const img = imageSource.fromFile(smallImagePath); @@ -199,6 +218,18 @@ export function testBase64Encode_JPEG() { "Base 64 encoded JPEG"); } +export function testBase64Encode_JPEG_With_Quality() { + const img = imageSource.fromFile(smallImagePath); + + let base64String = img.toBase64String("jpeg", 80); + base64String = base64String.substr(0, expectedJpegStart.length); + + TKUnit.assertEqual( + base64String, + expectedJpegStart, + "Base 64 encoded JPEG"); +} + export function testLoadFromBase64Encode_JPEG() { // >> imagesource-from-base-string let img: imageSource.ImageSource; diff --git a/tns-core-modules/image-source/image-source.d.ts b/tns-core-modules/image-source/image-source.d.ts index adde48c27..3e00213c4 100644 --- a/tns-core-modules/image-source/image-source.d.ts +++ b/tns-core-modules/image-source/image-source.d.ts @@ -98,14 +98,14 @@ export class ImageSource { * Saves this instance to the specified file, using the provided image format and quality. * @param path The path of the file on the file system to save to. * @param format The format (encoding) of the image. - * @param quality Optional parameter, specifying the quality of the encoding. Defaults to the maximum available quality. + * @param quality Optional parameter, specifying the quality of the encoding. Defaults to the maximum available quality. Quality varies on a scale of 0 to 100. */ saveToFile(path: string, format: "png" | "jpeg" | "jpg", quality?: number): boolean; /** * Converts the image to base64 encoded string, using the provided image format and quality. * @param format The format (encoding) of the image. - * @param quality Optional parameter, specifying the quality of the encoding. Defaults to the maximum available quality. + * @param quality Optional parameter, specifying the quality of the encoding. Defaults to the maximum available quality. Quality varies on a scale of 0 to 100. */ toBase64String(format: "png" | "jpeg" | "jpg", quality?: number): string; } diff --git a/tns-core-modules/image-source/image-source.ios.ts b/tns-core-modules/image-source/image-source.ios.ts index e0fcdd4cc..4493684d1 100644 --- a/tns-core-modules/image-source/image-source.ios.ts +++ b/tns-core-modules/image-source/image-source.ios.ts @@ -130,6 +130,10 @@ export class ImageSource implements ImageSourceDefinition { 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); @@ -144,6 +148,10 @@ export class ImageSource implements ImageSourceDefinition { 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();