


node.js menyelesaikan masalah mendapatkan jenis fail sebenar images_node.js
Menghadapi keperluan: Katakan terdapat fail imej, jenis sebenar ialah jpg, dan seseorang terlalu malas untuk menyalin jpg secara terus dan menyimpannya sebagai fail png dengan nama yang sama, supaya tidak ada masalah apabila AS3 membaca fail tetapi telefon mudah alih C menghadapi masalah semasa membaca fail - -!
Kini anda perlu menulis program untuk melintasi fail dalam semua folder dan mencari fail dengan format fail "tidak normal". Sumber kami terutamanya gif, png dan jpg Pada mulanya, saya menjumpai artikel di Internet: Dapatkan jenis mime jenis fail berdasarkan strim binari dan pengepala fail, dan kemudian baca maklumat pengepala binari fail untuk mendapatkannya. jenis fail sebenar , bandingkan dengan jenis fail yang diperoleh melalui nama akhiran.
var fd = fs.openSync(new_file_path, 'r');
var buffer = new Buffer(8);
var mineType = mime.lookup(new_file_path);
var fileType = mime.extension(mineType);
fs.readSync(fd, penimbal, 0, 8, 0);
var newBuf = buffer.slice(0, 4);
var head_1 = newBuf[0].toString(16);
var head_2 = newBuf[1].toString(16);
var head_3 = newBuf[2].toString(16);
var head_4 = newBuf[3].toString(16);
var head_iden = head_1 head_2;
var tempFileType = FILE_TYPE_CONFIG[head_iden];
jika (!tempFileType) {
kepala_iden = kepala_3;
tempFileType = FILE_TYPE_CONFIG[head_iden];
jika (!tempFileType) {
var msg = "Unknow fileType " new_file_path '-' fileType;
showLog(msg);
Teruskan;
}
}
jika (tempFileType != fileType) {
var msg = "Error fileType" new_file_path '-' fileType '|' tempFileType '--correct image file format';
ShowLog(msg);
g_errorFileTypArr.push(msg);
}
Kemudian, apabila saya mencari maklumat yang berkaitan dengan imej nod, saya menemui artikel ini: ranking modul node.js>> (imej)
Kemudian saya menapis modul "node-imageinfo" dan menulis contoh untuk ujian (sengaja menukar terus akhiran fail jpg kepada png):
Kod sumbernya, jika anda berminat, anda boleh mengkajinya:
fungsi readUInt32(buffer, offset, bigEndian) {
jika (buffer.readUInt32) {
return buffer.readUInt32(offset, bigEndian);
}
nilai var;
jika (bigEndian) {
jika (buffer.readUInt32BE) {
kembalikan penimbal.readUInt32BE(offset);
}
nilai = (penampan[offset] << 24) (penampan[offset 1] << 16) (penampan[offset 2] << 8) penimbal[offset 3];
}
lain {
jika (buffer.readUInt32LE) {
kembalikan penimbal.readUInt32LE(offset);
}
nilai = penimbal[offset] (penampan[offset 1] << 8) (penampan[offset 2] << 16) (penampan[offset 3] << 24);
}
nilai pulangan;
}
fungsi readUInt16(buffer, offset, bigEndian) {
jika (buffer.readUInt16) {
return buffer.readUInt16(offset, bigEndian);
}
nilai var;
jika (bigEndian) {
jika (buffer.readUInt16BE) {
kembalikan penimbal.readUInt16BE(offset);
}
nilai = (penampan[offset] << 8) penimbal[offset 1];
}
lain {
jika (buffer.readUInt16LE) {
kembalikan penimbal.readUInt16LE(offset);
}
nilai = penimbal[offset] (penampan[offset 1] << 8);
}
nilai pulangan;
}
fungsi readBit(buffer, offset, bitOffset) {
jika (bitOffset > 7) {
offset = Math.floor(bitOffset / 8);
bitOffset = bitOffset % 8;
}
var b = penimbal[offset];
jika (bitOffset < 7) {
b >>>= (7 - bitOffset);
}
var val = b & 0x01;
pulangkan val;
}
fungsi readBits(buffer, offset, bitOffset, bitLen, signed) {
var val = 0;
var neg = palsu;
jika (ditandatangani) {
if (readBit(buffer, offset, bitOffset) > 0) {
neg = benar;
}
bitLen--;
bitOffset ;
}
var bait = [];
untuk (var i = 0; i < bitLen; i ) {
var b = readBit(buffer, offset, bitOffset i);
jika (i>0 && (bitLen - i) % 8 == 0) {
bytes.push(val);
val = 0;
}
val <<= 1;
val |= b;
}
bytes.push(val);
val = Penampan baharu(bait);
val.negative = neg?true:false;
pulangkan val;
}
function imageInfoPng(buffer) {
var imageHeader = [0x49, 0x48, 0x44, 0x52],
pos = 12;
jika (!checkSig(buffer, pos, imageHeader)) {
pulangkan palsu;
}
pos = 4;
kembali {
taip: 'imej',
format: 'PNG',
mimeType: 'imej/png',
lebar: readUInt32(penampan, pos, benar),
ketinggian: readUInt32(penampan, pos 4, benar),
};
}
function imageInfoJpg(buffer) {
var pos = 2,
len = penimbal.panjang,
sizeSig = [0xff, [0xc0, 0xc2]];
manakala (pos < len) {
if (checkSig(buffer, pos, sizeSig)) {
pos = 5;
kembali {
taip: 'imej',
format: 'JPG',
mimeType: 'imej/jpeg',
lebar: readUInt16(penampan, pos 2, benar),
ketinggian: readUInt16(penampan, pos, benar),
};
}
pos = 2;
saiz var = readUInt16(penampan, pos, benar);
pos = saiz;
}
}
function imageInfoGif(buffer) {
var pos = 6;
kembali {
taip: 'imej',
format: 'GIF',
mimeType: 'imej/gif',
lebar: readUInt16(penampan, pos, palsu),
ketinggian: readUInt16(penampan, pos 2, palsu),
};
}
function imageInfoSwf(buffer) {
var pos = 8,
bitPos = 0,
val;
jika (penampan[0] === 0x43) {
cuba {
// Jika anda mempunyai zlib tersedia ( npm install zlib ) maka kita boleh membaca fail kilat termampat
penimbal = memerlukan('zlib').inflate(buffer.slice(8, 100));
pos = 0;
}
tangkap (cth) {
// Tidak boleh mendapatkan lebar/tinggi fail kilat termampat... lagi (perlu zlib)
kembali {
taip: 'flash',
format: 'SWF',
mimeType: 'application/x-shockwave-flash',
lebar: null,
ketinggian: null,
}
}
}
var numBits = readBits(buffer, pos, bitPos, 5)[0];
bitPos = 5;
val = readBits(buffer, pos, bitPos, numBits, true);
var xMin = (numBits > 9 ? readUInt16(val, 0, true) : val[0]) * (val.negatif ? -1 : 1);
bitPos = numBits;
val = readBits(buffer, pos, bitPos, numBits, true);
var xMax = (numBits > 9 ? readUInt16(val, 0, true) : val[0]) * (val.negatif ? -1 : 1);
bitPos = numBits;
val = readBits(buffer, pos, bitPos, numBits, true);
var yMin = (numBits > 9 ? readUInt16(val, 0, true) : val[0]) * (val.negatif ? -1 : 1);
bitPos = numBits;
val = readBits(buffer, pos, bitPos, numBits, true);
var yMax = (numBits > 9 ? readUInt16(val, 0, true) : val[0]) * (val.negatif ? -1 : 1);
kembali {
taip: 'flash',
format: 'SWF',
mimeType: 'application/x-shockwave-flash',
lebar: Math.ceil((xMax - xMin) / 20),
ketinggian: Math.ceil((yMax - yMin) / 20),
};
}
fungsi checkSig(buffer, offset, sig) {
var len = sig.length;
untuk (var i = 0; i < len; i ) {
var b = penimbal[i mengimbangi],
s = sig[i],
m = palsu;
jika ('nombor' == jenis s) {
m = s === b;
}
lain {
untuk (var k dalam s) {
var o = s[k];
jika (o === b) {
m = benar;
}
}
}
jika (!m) {
pulangkan palsu;
}
}
kembali benar;
}
module.exports = function imageInfo(buffer, path) {
var pngSig = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
var jpgSig = [0xff, 0xd8, 0xff];
var gifSig = [0x47, 0x49, 0x46, 0x38, [0x37, 0x39], 0x61];
var swfSig = [[0x46, 0x43], 0x57, 0x53];
jika (checkSig(buffer, 0, pngSig)) return imageInfoPng(buffer);
if (checkSig(buffer, 0, jpgSig)) return imageInfoJpg(buffer);
if (checkSig(buffer, 0, gifSig)) return imageInfoGif(buffer);
if (checkSig(buffer, 0, swfSig)) return imageInfoSwf(buffer);
kembali palsu;
};

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Memilih imej Docker untuk Node mungkin kelihatan seperti perkara remeh, tetapi saiz dan potensi kelemahan imej itu boleh memberi kesan yang ketara pada proses dan keselamatan CI/CD anda. Jadi bagaimana kita memilih imej Node.js Docker yang terbaik?

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Node 19 telah dikeluarkan secara rasmi Artikel ini akan memberi anda penjelasan terperinci tentang 6 ciri utama Node.js 19. Saya harap ia akan membantu anda!

Bagaimanakah Node.js melakukan GC (pengumpulan sampah)? Artikel berikut akan membawa anda melaluinya.

Gelung peristiwa ialah bahagian asas Node.js dan mendayakan pengaturcaraan tak segerak dengan memastikan bahawa utas utama tidak disekat Memahami gelung peristiwa adalah penting untuk membina aplikasi yang cekap. Artikel berikut akan memberi anda pemahaman yang mendalam tentang gelung acara dalam Node.

Sebab mengapa nod tidak boleh menggunakan arahan npm adalah kerana pembolehubah persekitaran tidak dikonfigurasikan dengan betul Penyelesaiannya ialah: 1. Buka "Sistem Sifat"; 2. Cari "Pembolehubah Persekitaran" -> "Pembolehubah Sistem", dan kemudian edit persekitaran. pembolehubah; 3. Cari lokasi folder nodejs;
