This commit is contained in:
2026-09-24 16:25:22 +08:00
commit 7428184f01
1198 changed files with 314515 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
## 1.0.22025-07-25
* 兼容原生鸿蒙
## 1.0.12025-02-10
* 兼容所有平台
## 1.0.02024-11-21
* 将base64对象转换为图片文件PNG格式
+83
View File
@@ -0,0 +1,83 @@
{
"id": "x-base642file-s",
"displayName": "x-base642file-s",
"version": "1.0.0",
"description": "x-base642file-s",
"keywords": [
"x-base642file-s"
],
"repository": "",
"engines": {
"HBuilderX": "^3.6.8"
},
"dcloudext": {
"type": "uts",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "",
"data": "",
"permissions": ""
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "u",
"aliyun": "u",
"alipay": "u"
},
"client": {
"Vue": {
"vue2": "u",
"vue3": "u"
},
"App": {
"app-android": "u",
"app-ios": "u",
"app-harmony": "u"
},
"H5-mobile": {
"Safari": "u",
"Android Browser": "u",
"微信浏览器(Android)": "u",
"QQ浏览器(Android)": "u"
},
"H5-pc": {
"Chrome": "u",
"IE": "u",
"Edge": "u",
"Firefox": "u",
"Safari": "u"
},
"小程序": {
"微信": "u",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"钉钉": "u",
"快手": "u",
"飞书": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}
+57
View File
@@ -0,0 +1,57 @@
# x-base642file-s
### 功能介绍
将Base64格式的图片数据转换为本地PNG文件,支持跨平台使用。
### 兼容性
| Harmony | IOS | Android | WEB | 小程序 |
| --- | --- | --- | --- | --- |
| 支持 | 支持 | 支持 | 支持 | 支持 |
### API文档
#### toPngFile
`toPngFile(data: string): Promise<string>`
将Base64格式的图片数据转换为本地PNG文件。
**参数说明:**
- data: Base64格式的图片数据字符串,支持带前缀(如:data:image/png;base64,)或纯Base64字符串
**返回值:**
- `Promise<string>`: 返回生成的PNG文件路径
- 成功:resolve(文件路径)
- 失败:reject(空字符串)
### 平台差异说明
- Android:文件保存在应用的外部缓存目录
- iOS:文件保存在应用的缓存目录
- Web:返回Blob URL
- 小程序:文件保存在小程序用户目录
### 使用示例
```ts
import { toPngFile } from "@/uni_modules/x-base642file-s"
// 示例:将Base64图片转换为本地文件
const convertToFile = async (base64Data: string) => {
try {
const filePath = await toPngFile(base64Data)
console.log('文件保存成功:', filePath)
} catch (error) {
console.error('转换失败')
}
}
```
### 注意事项
1. 使用前,Windows用户需要先在页面引用,打基座,再编译使用
2. Mac用户可直接引用使用
3. 建议在处理大量数据时进行适当的性能优化
4. 生成的文件会保存在各平台对应的缓存目录中,请注意及时清理不需要的文件
@@ -0,0 +1,3 @@
{
"minSdkVersion": "21"
}
@@ -0,0 +1,33 @@
import Context from "android.content.Context"
import Bitmap from "android.graphics.Bitmap"
import BitmapFactory from "android.graphics.BitmapFactory"
import Base64 from "android.util.Base64"
import File from "java.io.File"
import FileOutputStream from "java.io.FileOutputStream"
export function toPngFile(data : string) : Promise<string> {
let fileName = Math.random().toString(16).substring(2, 16)
let baesestrAr = data.split(',') as string[]
let base64Data = baesestrAr[1]
let fileUrl = ''
try {
let context = UTSAndroid.getAppContext()!
let filepath = context.getExternalCacheDir()?.getPath() ?? ""
// 解码Base64字符串
let decodedBytes = Base64.decode(base64Data, Base64.DEFAULT)
let bitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size)
let file = new File(filepath, fileName + '.png');
let fos = new FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fileUrl = file.getPath();
} catch (error) {
console.error('处理图片错误:', error)
//TODO handle the exception
return Promise.reject(fileUrl) as Promise<string>
}
return Promise.resolve(fileUrl)
}
@@ -0,0 +1,5 @@
{
"dependencies": {
"x_library_s": "./lib/x_library_s.har"
}
}
@@ -0,0 +1,14 @@
import { x_toPngFile } from "x_library_s";
import { BusinessError } from "@kit.BasicServicesKit";
export function toPngFile(data : string) : Promise<string> {
try {
const file = x_toPngFile(UTSHarmony.getCurrentWindow()!.getUIContext(),data)
return Promise.resolve(file);
} catch (error) {
const e = error as BusinessError;
console.error("TMUI",e.message)
return Promise.reject(e.message);
}
}
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
</dict>
</plist>
@@ -0,0 +1,3 @@
{
"deploymentTarget": "12"
}
@@ -0,0 +1,19 @@
import { Data } from 'Foundation';
import { UIImage } from 'UIKit';
export function toPngFile(data : string):Promise<string> {
let fileName = Math.random().toString(16).substring(2,16)
let baesestrAr = data.split(',') as string[]
let base64Data = baesestrAr[1]
let imageData = new Data(base64Encoded = base64Data)
if(imageData==null) return Promise.reject('') as Promise<string>
let image = new UIImage(data = imageData!)
if(image==null) return Promise.reject('') as Promise<string>
let userDir = FileManager.default.urls(for = FileManager.SearchPathDirectory.cachesDirectory, in = FileManager.SearchPathDomainMask.userDomainMask).first!
let destinationFileName = fileName + ".png"
let fileURL = userDir.appendingPathComponent(destinationFileName)
let isSuccess = UTSiOS.try(imageData!.write(to =fileURL),"?")
if(isSuccess==null) return Promise.reject('') as Promise<string>
return Promise.resolve(fileURL.path)
}
@@ -0,0 +1,18 @@
export function toPngFile(data : string) : Promise<string> {
let bdataBase64 = data.split(',')[1]
let fileMg = wx.getFileSystemManager();
let filepath = `${wx.env.USER_DATA_PATH}/${Math.random().toString(16).substring(4, 20)}.png`
return new Promise((res, rej) => {
fileMg.writeFile({
filePath: filepath,
data: bdataBase64,
encoding: "base64",
success() {
res(filepath)
},
faile() {
rej("")
}
})
})
}
@@ -0,0 +1,20 @@
// function compressImage(quality:number) : string {
// let base64data = canvas.toDataURL('image/jpeg', attrs.compress / 100);
// return base64data;
// }
function base64ToBlob(data : string) : Blob {
let bytes = window.atob(data.split(',')[1])
let ab = new ArrayBuffer(bytes.length)
let ia = new Uint8Array(ab)
for (let i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i)
}
// @ts-ignore
return new Blob([ab], { type: 'image/jpeg' })
}
// ,quality:number
export function toPngFile(data : string) : Promise<string> {
let bloblfaile = URL.createObjectURL(base64ToBlob(data));
return Promise.resolve(bloblfaile);
}