- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
HEIC 是 Apple 自己的格式,用于存储使用 iOS 相机拍摄的高分辨率图像。但我会存储在后端 JPG 上,因为 HEIC 在大多数浏览器中不显示,甚至在 Safari 中也不显示。
解决方案1
我尝试了这个转换:
const buffer = Buffer.from(await file.arrayBuffer())
const d = heicConvert({ buffer, format: 'JPEG' })
const imgBase64 = btoa(
d.reduce((data, byte) => `${data}${String.fromCharCode(byte)}`, '')
)
但是因为我使用 Next.js 它与它不兼容。
Failed to compile.
./node_modules/libheif-js/libheif/libheif.js
Module not found: Can't resolve 'fs' in '/Users/janoskukoda/Workspace/tikex/portal/team/node_modules/libheif-js/libheif'
解决方案2
我也尝试过:
export default uploadImage
const buffer = await file.arrayBuffer()
const image = sharp(buffer)
const metadata = await image.metadata()
if (metadata.format === 'heic') {
// Convert the image to JPG
const jpgBuffer = await image.jpeg().toBuffer()
// Encode the JPG image as a base64 string
const imgBase64 = btoa(
jpgBuffer.reduce((data, byte) => `${data}${String.fromCharCode(byte)}`, '')
)
}
但是我无法编译,看来sharp
不建议在客户端使用。
你还有其他办法吗?
无论如何,想法就在这里:https://itnext.io/tackling-iphone-or-ipad-images-support-in-browser-8e3e64e9aaa1
如果你向我展示一个使用无服务器 API 的解决方案,也可以。重要的是文件来自 html 输入元素。
解决方案3
import loadImage from 'blueimp-load-image'
convertedImage = await new Promise((resolve, reject) => {
loadImage(
propsAndFile.file,
resolve,
{ orientation: true, canvas: true },
reject
)
})
最佳答案
Before getting to the answer: You can never trust data uploaded by a client — you must always validate/convert using a process that is not accessible by a user (a backend process) to ensure data validity: even if there are mechanisms in place to validate received network requests as coming from an authenticated user on your site, any user can still use developer tools to execute arbitrary JavaScript and send whatever kinds of network requests with whatever payloads that they want to.
关于 iOS 设备以及从文件输入获取 JPEG 而不是 HEIF:您不需要自己执行此操作 — iOS 可以为您执行此操作。
<input type="file">
元素支持 accept
可用于限制可上传的文件媒体类型类型的属性:请阅读 <input type="file">
的 MDN 文档文章的限制接受的文件类型部分了解更多信息。 .
下面是一个示例,展示了如何使用该属性。当 iOS 用户选择输入时,他们可以选择使用相机拍照或从照片库中选择一张照片。在这两种情况下,iOS 都会自动执行必要的 JPEG 文件转换(例如,即使从照片库中选择的图像是 HEIF 格式)。当您在 iOS 设备上尝试使用 HEIF 编码的图像时,该示例演示了这一点:
const input = document.getElementById('image-upload');
const output = document.getElementById('output');
const updateDisplayedFileInfo = () => {
const file = input.files?.[0];
if (!file) {
output.textContent = 'No file selected';
return;
}
const dateModified = new Date(file.lastModified).toISOString();
const {name, size, type} = file;
const data = {
dateModified,
name,
size,
type,
};
const json = JSON.stringify(data, null, 2);
output.textContent = json;
};
input.addEventListener('change', updateDisplayedFileInfo);
updateDisplayedFileInfo();
pre { background-color: hsla(0, 0%, 50%, 0.1); padding: 0.5rem; } code { font-family: monospace; }
<input id="image-upload" type="file" accept="image/jpeg" />
<pre><code id="output"></code></pre>
关于reactjs - 如何在 React 中将 HEIC 转换为 JPG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74856178/
下面的ffmpeg图像转换适用于诺基亚构象heic文件,但不适用于iphone heic图像 ffmpeg -i c001.heic -c:v mjpeg -frames:v 1 -pix_fmt r
我在 ASP.NET 中有一个支持 JPG/PNG/GIF 的图像上传表单,我认为这就足够了。直到 Apple 推出了他们新的 HEIC 图像格式。我如何在 C# 中处理它? 在 Google 中搜索
我正在尝试使用 ImageIO 以 HEIC 文件格式保存图像。代码看起来像这样: NSMutableData *imageData = [NSMutableData data]; CGImageDe
我正在使用新的 HEIC 格式将蒙版图像保存到文档目录。与同一蒙版图像的 PNG 版本进行比较时,我发现添加了一些新的工艺品。 这是受影响图像的屏幕截图: 这是展示此问题的工作存储库的链接(请通过新的
我正在做人脸检测项目,想知道opencv是否在imread()和imwrite()方法中提供了对heic格式的支持?可以使用 cv2 的 imread() 函数读取图像并使用 cv2.imwrite(
对于 c++ 项目,我需要打开并显示 HEIF (.heic) 图像。我所知道的(如果我是对的)是 HEIF 图像基于 ffmpeg 标准,并且需要读取 H265 编解码器。 我找到了几个开源 H26
IOS 11 上的新 .HEIC 文件导致问题,因为图像托管服务不支持它。 相机胶卷 api 正在返回 .HEIC 文件。我们如何才能获得 .JPG/.PNG 文件。或将 .HEIC 转换为 .JPG
下面的方法获取所选照片中特定点的像素颜色。当选择 JPG 时,下面的图像处理速度很快。当选择 HEIC 照片时,下面的图像处理速度很慢。速度可能慢约 40 倍(7 秒 vs 5 分钟)。 我想知道这是
我的印象是 UIImage 会支持 iOS 11 中引入的 HEIC/HEIF 文件。但在我的测试中,情况似乎并非如此。如果我确实让 image = UIImage(named: "test") 指向
我正在尝试在 jpeg 中转换 heic 文件,同时导入所有元数据(如 gps 信息和其他内容),不幸的是,转换下面的代码是可以的,但没有元数据存储在创建的 jpeg 文件中。 任何人都可以描述我需要
试图弄清楚 Safari 是否支持或不支持 iOS 11 的新图像格式 HEIC/HEIF。尝试了很多东西,它似乎不起作用。谢谢。 最佳答案 通过检查 CanIUse ,iOS11在Safari中不支
Windows Imaging Component 用于解码 heif 图像。但是,成功解码图像需要来自 Microsoft 商店的额外应用程序(heif 图像扩展、hevc 视频扩展)。 没有它们,
我正在尝试将多个图像上传到后端,但我正在使用的后端不支持图像的 heic 格式。所以我想将这些heic图像转换为JPG并使用文件位置上传。我使用下面的方法从 fileURL 上传图像。 func up
我想对图库中的图像(由 iPhone 相机拍摄)执行编辑,例如 JEPG 压缩,但当输入图像是 HEIC 图像,但适用于 JPEG 图像。 我通过 UIImagePickerController 方法
我有一个应用程序,用户可以在其中上传多张图片,所有图片都将存储在服务器中,并将显示在我的 iOS 应用程序的 Web View 中。 现在在 iOS 10 之前一切正常,但突然我们开始看到一些图片/图
High Efficiency Image File (HEIF) 格式是将图像从 iPhone 空投到 OSX 设备时的默认格式。我想用 Python 编辑和修改这些 .HEIC 文件。 我可以修改
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我在项目的 xcassets 文件夹中设置了 .heic 图像以节省一些空间。但是我无法通过 UIImage(named:) 构造函数加载它们。我总是得到 nil,所以我必须加载它们的唯一方法是指定
HEIC 是 Apple 自己的格式,用于存储使用 iOS 相机拍摄的高分辨率图像。但我会存储在后端 JPG 上,因为 HEIC 在大多数浏览器中不显示,甚至在 Safari 中也不显示。 解决方案1
当通过 FileReader api 从输入元素读取文件时,它可以工作,但我的 android 设备也允许发送文件,而且它似乎无论如何都发送 heic 文件,这会导致控制台中没有任何错误的空图像。直接
我是一名优秀的程序员,十分优秀!