» »

Image formating

Image formating

HotBurek ::

Pozdravljeni

Delam en program za upload slik (HTML + Nginx + uWSGI + Python). Problem imam pri tem, kako konvertat uploadano sliko nazaj v original.

Preko HTMLja uploadam sliko na strežnik:

<form action="/python.py" method="POST" enctype="multipart/form-data">
	<input type="file" name="slika" accept="image/*">
	<input type="submit">
</form>

Potem pa na Nginx strežniku to preberem, shranim v cache direktorij, ter preko uWSGI kličem Python skripto, ki lahko dostopa do te slike. Python skripta to sliko potem prestavi v drug direktorij. All gut.

Nginx config je trenutno takle:
location / {
        #try_files $uri /test.txt =404;
        try_files /python.py =404;

        include uwsgi_params;
        include mime.types;

        uwsgi_modifier1 9;
        uwsgi_pass 127.0.0.1:9999;
        uwsgi_pass_request_body off;
        uwsgi_pass_request_headers on;
        #uwsgi_param HTTP_REFERER $http_referer;
        #uwsgi_param DOCUMENT_BODY $request_body;
        uwsgi_param HTTP_X_FILE $request_body_file;
        uwsgi_param CONTENT_LENGTH 0;

        client_max_body_size 20M;
        client_body_timeout 60;
        client_body_in_file_only on;
        client_body_buffer_size 128K;
        client_body_temp_path /var/some/cache;
}


In do tu vse lepo dela. Problem pa nastane, ko je potrebno uploadano sliko spremenit nazaj v original file. Se pravi, odstranit headerje, ki so bili pri prenosu dodani. In tu ne vem, kako to naredit.

[Spodaj iz slike]
- Preko sftp sem na strežnik shranil original sliko pixel.png (številka 1).
- Potem to isto sliko na strežnik prenesem še preko HTML/Nginx. Poimenovana je 0000000001.png (številka 2).
- In sedaj fajl 0000000001.png skopiram v 0000000001-v.png (številka 3), ter odstranim "header" in "footer". In ta št.3 ni isti št.1 (se vidi po diff), pa tudi v browserju se ga ne da odpret.


In to mi fali. Kako file št.2 konvertat tako, da bo ratal original file, kot je št.1?



p.s.: Če bi se dalo v FF disejblat bližnjico Ctrl+W, bi blo kr gut. :O
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Spura ::

Ti ne shranjujes slike v fajl ampak celo formo, torej multipart MIME (ki vsebuje tudi tvojo sliko).

HotBurek ::

Zgleda, da sem rešil. Sem napisal en parser (trenutno testrun), ki najde začetek in konec slike (binarni del) in samo tistega skopira. Zaenkrat sem potestiral samo na eni sliki...

Spodaj slika in koda, če komu pride prav.



#!/usr/bin/python3.7

# import
import os;

path = "/home/user1/readbyte";

print("ORIGINAL");
print("");

file = open(path + "/pixel.png", "rb");
original = file.read();
file.close();

print(original);

print("");

print("UPLOAD");
print("");

file = open(path + "/upload.png", "rb");
imagestring = file.read();
file.close();

print(imagestring);

print("");

print("STRINGLINE");
print("");

stringline = "";
intarray = [];

# fix it
for i in range(0, len(imagestring)):
    # print(str(imagestring[i]) + " " + str(chr(imagestring[i])));
    stringline += str(imagestring[i]);
    # intarray.extend([str(imagestring[i])]);
    intarray.extend([imagestring[i]]);

print(stringline);

print("");

print("STRINGLINE2");
print("");

stringline2 = "";

if stringline.find("13101310") > -1:
    stringline2 = stringline[stringline.find("13101310") + len("13101310"):];

if stringline2.find("131045") > -1:
    stringline2 = stringline2[:stringline2.find("131045")];

print(stringline2);

print("");

# first find 13-10-13-10
for i in range(0, len(intarray) - 3):
    if intarray[i] == 13 and \
            intarray[i + 1] == 10 and \
            intarray[i + 2] == 13 and \
            intarray[i + 3] == 10:

        intarray = intarray[i + 4:];
        break;

# second find 13-10-45
for i in reversed(range(0, len(intarray) - 2)):
    if intarray[i] == 45 and \
            intarray[i - 1] == 10 and \
            intarray[i - 2] == 13:
        intarray = intarray[:i - 2];
        break;

print("INTARRAY");
print("");

for i in range(0, len(intarray)):
    print(intarray[i], end=" ");

print("");
print("");


print("COPY");
print("");

file = open(path + "/copy.png", "wb");
for i in range(0, len(intarray)):
    file.write(bytes([intarray[i]]));
file.close();

file = open(path + "/copy.png", "rb");
copy = file.read();
file.close();

print(copy);

print("");
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162787 (1017) rnla1973
»

Zanka z zajemanjem števk

Oddelek: Programiranje
61135 (820) misticnimrk
»

program za pomoč pri tiskanju 200+pdf dokumentov

Oddelek: Pomoč in nasveti
252297 (1349) HotBurek
»

Postavitev mySQL

Oddelek: Programiranje
92242 (1820) M01O
»

Fake traffic generator

Oddelek: Omrežja in internet
192267 (1463) HotBurek

Več podobnih tem