我需要将输入图像(blob)转换为 base64 图像。我知道尺寸会增加大约 1.37。
然而,我注意到,firereader.readAsDataUrl与 macOS 上内置的 base64 命令行工具相比,使用图像的尺寸非常大。
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
重现步骤:
下载此免费示例图像https://wall.alphacoders.com/big.php?i=685897请务必单击“下载”按钮(下载原始 8000x600)。不要使用右键另存为,因为图像会被压缩
使用 jsfiddle 选择上面下载的镜像,并检查控制台日志中是否有 64 进制的大小。https://jsfiddle.net/b7nkw8j9/可以看到大小为11.2mb。
现在,如果您在 Mac 上使用 Base64 命令行工具将上面下载的图像转换为 Base64 并检查文件大小。您将在这里看到 base64 大小。5.9MB。base64 -w 0 downloaded_image.jpg > downloaded_image.base64
这是我在代码中使用的将输入文件图像转换为 Base64 的函数。
async convertToBase64(file) {
if (file === undefined) {
throw new Error("File could not be found");
}
const fileReader = new FileReader();
return new Promise((resolve, reject) => {
fileReader.readAsDataURL(file);
fileReader.onerror = (error) => {
reject("Input: …Run Code Online (Sandbox Code Playgroud) 我在使用 for 循环在另一个字典中创建具有多个键和值的字典时遇到问题。
我有一个程序可以读取另一个文本文件,然后将其信息输入到字典中。该文件看起来像这样:
GPU;GeForce GTX 1070 Ti;430
CPU;AMD Ryzen 7 2700X;233
GPU;GeForce GTX 2060;400
CPU;Intel Core i7-11700;360
RAM;HyperX 16GB;180
PSU;Corsair RM850X;210
Run Code Online (Sandbox Code Playgroud)
我想要实现的是,我尝试为每个组件类型 {GPU、CPU、RAM、PSU 等} 创建一个字典,并尝试输入另一个字典,该字典由多个键组成以及值为 {name1 :price1, name2 :price2, etc.} 运行程序后,完整的字典应如下所示:
"GPU": {"GeForce GTX 1070 Ti": 430, "GeForce GTX 2060 2": 233},
"CPU": {"AMD Ryzen 7 2700X": 233, "Intel Core i7-11700 : 360},
"RAM": {"HyperX 16GB": 180},
"PSU": {"Corsair RM850X": 210}
Run Code Online (Sandbox Code Playgroud)
但相反,它看起来像这样:
"GPU": {"GeForce GTX 2060 2": 233},
"CPU": {"Intel Core i7-11700 : 360},
"RAM": {"HyperX 16GB": 180},
"PSU": …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Rust 读取 8K 32 位 OpenEXR HDR 文件。使用 Image crate 读取文件:
use image::io::Reader as ImageReader;
let img = ImageReader::open(r"C:\Users\Marko\Desktop\HDR_Big.exr")
.expect("File Error")
.decode()
.expect("Decode ERROR");
Run Code Online (Sandbox Code Playgroud)
这导致Decode ERROR: Limits(LimitError { kind: InsufficientMemory })
读取 4K 或更小的文件效果很好。
我认为缓冲会有所帮助,所以我尝试了:
use image::io::Reader as ImageReader;
use std::io::BufReader;
use std::fs::File;
let f = File::open(r"C:\Users\Marko\Desktop\HDR_Big.exr").expect("File Error");
let reader = BufReader::new(f);
let img_reader = ImageReader::new(reader)
.with_guessed_format()
.expect("Reader Error");
let img = img_reader.decode().expect("Decode ERROR");
Run Code Online (Sandbox Code Playgroud)
但结果是同样的错误。 这是图像箱本身的问题吗?可以避免吗?
如果解码图像后对解决方案有任何影响,我将使用如下原始数据:
let data: Vec<f32> = img.to_rgb32f().into_raw();
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试将文本文件的每一行复制到jcomboBox中,但它只显示jcomboBox中文本文件的第一行...我不明白为什么.你能解释一下我有什么问题吗?
(...)
BufferedReader in;
String read;
try {
in = new BufferedReader(new FileReader("D:/File.txt"));
read = in.readLine();
lines[w]=read;
++w;
in.close();
}catch(IOException e){
System.out.println("There was a problem:" + e);
}
combo1 = new JComboBox(lines);
combo1.setPreferredSize(new Dimension(100,20));
combo1.setForeground(Color.blue);
JPanel top = new JPanel();
top.add(label);
top.add(combo1);
combo1.addActionListener(new ActionFichiers());
container.add(top, BorderLayout.NORTH);
this.setContentPane(container);
this.setVisible(true);
}
(...)
Run Code Online (Sandbox Code Playgroud) 我的小项目有问题.每当音乐播放器将新歌曲加载到播放列表中,或者您正在按下列表中的一首歌曲来播放它时,它会占用大量内存,并且在您将其关闭之前一直保持高位.我认为每次我使用文件读取器API它都使用内存,但我也在使用jDataView.js脚本加载ID3信息,我也认为它占用了大量内存.
你们有没有任何建议,加载,存储和播放歌曲FileReader,而不占用内存?我试过看看是否可以在使用后清除fileReader,但我找不到任何东西.我只在Chrome中测试过.
更新:我已经测试了我的项目,并发现,当我试图加载数据串时它占用了内存.
reader.onloadend = function(evt) {
if(typeof(e) != "undefined"){
e.pause();
}
e = new Audio();
e.src = evt.target.result; // evt.target.result call takes the memory
e.setAttribute("type", songs[index]["file"].type);
e.play();
e.addEventListener("ended", function() { LoadAudioFile(index + 1) }, false);
};
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法将数据加载到音频元素?
我有一个巨大的文本文件,我需要阅读.目前我正在阅读这样的文本文件..
string[] lines = File.ReadAllLines(FileToCopy);
Run Code Online (Sandbox Code Playgroud)
但是这里所有的行都被存储在行数组中,然后根据条件正在编程处理,这是没有效率的方式,因为它首先将文本文件的不相关的行(行)读成数组,同样的方式将去用于处理.所以我的问题是我可以把行号从文本文件中读取.假设上次读取10001行,下次应该从10002开始.如何实现呢?
我在网络上迭代一个大目录(500 GB),我需要从root和子目录中迭代所有文件,这是我的示例代码
static void WalkDirectoryTree(DirectoryInfo root, DbContext dbcontext)
{
FileInfo[] files = null;
DirectoryInfo[] subDirs = null;
try
{
Console.WriteLine(DateTime.Now + " Listing files...");
files = root.GetFiles("*.*");
Console.WriteLine(DateTime.Now + " Files obtained.");
}
catch (UnauthorizedAccessException e)
{
}
catch (System.IO.DirectoryNotFoundException e)
{
Debug.Print(e.Message);
}
if (files != null)
{
Console.WriteLine(DateTime.Now + " Iterating files...");
foreach (System.IO.FileInfo fi in files)
{
Console.WriteLine(DateTime.Now + " Indexing [" + fi.FullName + "]...");
doIndex(IndexData index = new IndexData();
index.attachementUID = fi.Name;
dbcontext.IndexDatas.Add(index);
}
Console.WriteLine(DateTime.Now …Run Code Online (Sandbox Code Playgroud) 我设置了一个FileReader,并打开了一个文件来读取,但它给了我一个奇怪的输出,我似乎无法解决:
import java.io.BufferedReader;
import java.io.FileReader;
public class FileReading {
public static void main(String [] args) throws Exception {
FileReader file = new FileReader("/Users/danielpersonius/Desktop/test.rtf");
BufferedReader reader = new BufferedReader(file);
String text = "";
String line = reader.readLine();
while (line != null){
// So here, we want to print until it reaches 'null'
text += line;
line = reader.readLine();
}
System.out.println(text);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
{\ rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200 {\ fonttbl\f0\fswiss\fcharset0 Helvetica;} {\ colortbl;\red255\green255\blue255;}\margl1440\margr1440\vieww10800\viewh8400\viewkind0\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\f0\fs24\cf0 TEST}
TEST是rtf文件所说的,但是如何摆脱我显然不想要的所有其他东西呢?我是OS X Mavericks的IMac
我在stackoverflow上查看了很多不同的主题,但到目前为止找不到任何有用的东西:/
所以这是我的问题.我正在写一个文件复制者.在读取文件时已发生此问题.我的测试文档有3行随机文本.所有这三行都应该用字符串数组写出来.问题是只有textdocument的第二行被写入数组,我无法弄清楚原因.已经调试过,但没有让我更进一步.
我知道有一个不同的解决方案,文件复制程序有不同的类等.但我真的想让它与我在这里使用的类一起运行.
String[] array = new String[5];
String datei = "test.txt";
public String[] readfile() throws FileNotFoundException {
FileReader fr = new FileReader(datei);
BufferedReader bf = new BufferedReader(fr);
try {
int i=0;
//String Zeile = bf.readLine();
while(bf.readLine() != null){
array[i] = bf.readLine();
// System.out.println(array[i]); This line is for testing
i++;
}
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
return array;
Run Code Online (Sandbox Code Playgroud) 在Chrome中工作,加载本地 html或JS文件.
我找到了许多如何加载使用"选择文件"输入选择的文件的示例.
但是,如果不使用"选择文件"输入,则无法确定如何在给定文件名的情况下执行此操作.
"选择文件"输入返回File对象.
如何在没有选择文件输入的情况下创建File对象?
从File API:
new File(
Array parts,
String filename,
BlobPropertyBag properties
);
Run Code Online (Sandbox Code Playgroud)
但没有弄清楚零件和属性是什么.
编辑:用例:
我将代码覆盖率结果作为测试套件的一部分生成.它存储为JSON(易于阅读),但我需要用源代码显示它.
因此,该功能是加载源代码和JSON数据,并使用HTML和Javascript在网页上将它们一起呈现.
该文件将从浏览器打开并存在于本地计算机上.没有服务器.
filereader ×10
java ×3
javascript ×3
c# ×2
html5 ×2
.net ×1
arrays ×1
base64 ×1
dictionary ×1
file ×1
fileapi ×1
filewriter ×1
image ×1
jcombobox ×1
nested ×1
python ×1
rust ×1
swing ×1
text-files ×1
while-loop ×1