Skip to content
Snippets Groups Projects
Commit 06c564c4 authored by André Anjos's avatar André Anjos :speech_balloon:
Browse files

[pnmio.cpp] Fix readout of images containing empty lines (such as those produced by GIMP)

parent 4c28740b
No related branches found
No related tags found
1 merge request!43Fix readout of netpbm images containing empty lines (such as those produced by GIMP)
Pipeline #29373 failed
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
#include <iostream>
#include "pnmio.h" #include "pnmio.h"
#define MAXLINE 1024 #define MAXLINE 1024
...@@ -34,6 +35,25 @@ ...@@ -34,6 +35,25 @@
#define RGB_TYPE 1 /* used for PFM */ #define RGB_TYPE 1 /* used for PFM */
/* line_start
* Tells if a line should be ignored (completely empty or contains a comment)
* Returns: non-null if we should start reading from that position.
*/
static char* line_start (char* line) {
char* start = line;
int size = strnlen(line, MAXLINE);
for (int i = 0; i < size; ++i, ++start) {
if (isspace(*start)) continue;
if (isgraph(*start)) {
if ((*start) == '#') start = NULL;
break;
}
}
if (start == (line+size)) start = NULL; /* end-of-line ignore it */
return start;
}
/* get_pnm_type: /* get_pnm_type:
* Read the header contents of a PBM/PGM/PPM/PFM file up to the point of * Read the header contents of a PBM/PGM/PPM/PFM file up to the point of
* extracting its type. Valid types for a PNM image are as follows: * extracting its type. Valid types for a PNM image are as follows:
...@@ -51,26 +71,16 @@ ...@@ -51,26 +71,16 @@
*/ */
int get_pnm_type(FILE *f) int get_pnm_type(FILE *f)
{ {
int flag=0;
int pnm_type=0; int pnm_type=0;
unsigned int i;
char magic[MAXLINE]; char magic[MAXLINE];
char line[MAXLINE]; char line[MAXLINE];
/* Read the PNM/PFM file header. */ /* Read the PNM/PFM file header. */
while (fgets(line, MAXLINE, f) != NULL) { while (fgets(line, MAXLINE, f) != NULL) {
flag = 0; char* start = line_start(line);
for (i = 0; i < strlen(line); i++) { if (!start) continue; /* skip this line */
if (isgraph(line[i])) { sscanf(line, "%s", magic);
if ((line[i] == '#') && (flag == 0)) { break;
flag = 1;
}
}
}
if (flag == 0) {
sscanf(line, "%s", magic);
break;
}
} }
/* NOTE: This part can be written more succinctly, however, /* NOTE: This part can be written more succinctly, however,
...@@ -101,6 +111,7 @@ int get_pnm_type(FILE *f) ...@@ -101,6 +111,7 @@ int get_pnm_type(FILE *f)
return (pnm_type); return (pnm_type);
} }
/* read_pbm_header: /* read_pbm_header:
* Read the header contents of a PBM (Portable Binary Map) file. * Read the header contents of a PBM (Portable Binary Map) file.
* An ASCII PBM image file follows the format: * An ASCII PBM image file follows the format:
...@@ -114,35 +125,23 @@ int get_pnm_type(FILE *f) ...@@ -114,35 +125,23 @@ int get_pnm_type(FILE *f)
*/ */
int read_pbm_header(FILE *f, int *img_xdim, int *img_ydim, int *is_ascii) int read_pbm_header(FILE *f, int *img_xdim, int *img_ydim, int *is_ascii)
{ {
int flag=0;
int x_val, y_val; int x_val, y_val;
unsigned int i;
char magic[MAXLINE]; char magic[MAXLINE];
char line[MAXLINE]; char line[MAXLINE];
int count=0; int count=0;
/* Read the PBM file header. */ /* Read the PBM file header. */
while (fgets(line, MAXLINE, f) != NULL) { while (fgets(line, MAXLINE, f) != NULL) {
flag = 0; char* start = line_start(line);
for (i = 0; i < strlen(line); i++) { if (!start) continue; /* skip this line */
if (isgraph(line[i])) { if (count == 0) {
if ((line[i] == '#') && (flag == 0)) { count += sscanf(start, "%s %d %d", magic, &x_val, &y_val);
flag = 1; } else if (count == 1) {
} count += sscanf(start, "%d %d", &x_val, &y_val);
} } else if (count == 2) {
} count += sscanf(start, "%d", &y_val);
if (flag == 0) {
if (count == 0) {
count += sscanf(line, "%s %d %d", magic, &x_val, &y_val);
} else if (count == 1) {
count += sscanf(line, "%d %d", &x_val, &y_val);
} else if (count == 2) {
count += sscanf(line, "%d", &y_val);
}
}
if (count == 3) {
break;
} }
if (count == 3) break;
} }
if (strcmp(magic, "P1") == 0) { if (strcmp(magic, "P1") == 0) {
...@@ -176,37 +175,26 @@ int read_pbm_header(FILE *f, int *img_xdim, int *img_ydim, int *is_ascii) ...@@ -176,37 +175,26 @@ int read_pbm_header(FILE *f, int *img_xdim, int *img_ydim, int *is_ascii)
*/ */
int read_pgm_header(FILE *f, int *img_xdim, int *img_ydim, int *img_colors, int *is_ascii) int read_pgm_header(FILE *f, int *img_xdim, int *img_ydim, int *img_colors, int *is_ascii)
{ {
int flag=0;
int x_val, y_val, maxcolors_val; int x_val, y_val, maxcolors_val;
unsigned int i;
char magic[MAXLINE]; char magic[MAXLINE];
char line[MAXLINE]; char line[MAXLINE];
int count=0; int count=0;
/* Read the PGM file header. */ /* Read the PGM file header. */
while (fgets(line, MAXLINE, f) != NULL) { while (fgets(line, MAXLINE, f) != NULL) {
flag = 0; char* start = line_start(line);
for (i = 0; i < strlen(line); i++) { if (!start) continue; /* skip this line */
if (isgraph(line[i]) && (flag == 0)) { if (count == 0) {
if ((line[i] == '#') && (flag == 0)) { count += sscanf(start, "%s %d %d %d", magic, &x_val, &y_val,
flag = 1; &maxcolors_val);
} } else if (count == 1) {
} count += sscanf(start, "%d %d %d", &x_val, &y_val, &maxcolors_val);
} } else if (count == 2) {
if (flag == 0) { count += sscanf(start, "%d %d", &y_val, &maxcolors_val);
if (count == 0) { } else if (count == 3) {
count += sscanf(line, "%s %d %d %d", magic, &x_val, &y_val, &maxcolors_val); count += sscanf(start, "%d", &maxcolors_val);
} else if (count == 1) {
count += sscanf(line, "%d %d %d", &x_val, &y_val, &maxcolors_val);
} else if (count == 2) {
count += sscanf(line, "%d %d", &y_val, &maxcolors_val);
} else if (count == 3) {
count += sscanf(line, "%d", &maxcolors_val);
}
}
if (count == 4) {
break;
} }
if (count == 4) break;
} }
if (strcmp(magic, "P2") == 0) { if (strcmp(magic, "P2") == 0) {
...@@ -241,37 +229,26 @@ int read_pgm_header(FILE *f, int *img_xdim, int *img_ydim, int *img_colors, int ...@@ -241,37 +229,26 @@ int read_pgm_header(FILE *f, int *img_xdim, int *img_ydim, int *img_colors, int
*/ */
int read_ppm_header(FILE *f, int *img_xdim, int *img_ydim, int *img_colors, int *is_ascii) int read_ppm_header(FILE *f, int *img_xdim, int *img_ydim, int *img_colors, int *is_ascii)
{ {
int flag=0;
int x_val, y_val, maxcolors_val; int x_val, y_val, maxcolors_val;
unsigned int i;
char magic[MAXLINE]; char magic[MAXLINE];
char line[MAXLINE]; char line[MAXLINE];
int count=0; int count=0;
/* Read the PPM file header. */ /* Read the PPM file header. */
while (fgets(line, MAXLINE, f) != NULL) { while (fgets(line, MAXLINE, f) != NULL) {
flag = 0; char* start = line_start(line);
for (i = 0; i < strlen(line); i++) { if (!start) continue; /* skip this line */
if (isgraph(line[i]) && (flag == 0)) { if (count == 0) {
if ((line[i] == '#') && (flag == 0)) { count += sscanf(start, "%s %d %d %d", magic, &x_val, &y_val,
flag = 1; &maxcolors_val);
} } else if (count == 1) {
} count += sscanf(start, "%d %d %d", &x_val, &y_val, &maxcolors_val);
} } else if (count == 2) {
if (flag == 0) { count += sscanf(start, "%d %d", &y_val, &maxcolors_val);
if (count == 0) { } else if (count == 3) {
count += sscanf(line, "%s %d %d %d", magic, &x_val, &y_val, &maxcolors_val); count += sscanf(start, "%d", &maxcolors_val);
} else if (count == 1) {
count += sscanf(line, "%d %d %d", &x_val, &y_val, &maxcolors_val);
} else if (count == 2) {
count += sscanf(line, "%d %d", &y_val, &maxcolors_val);
} else if (count == 3) {
count += sscanf(line, "%d", &maxcolors_val);
}
}
if (count == 4) {
break;
} }
if (count == 4) break;
} }
if (strcmp(magic, "P3") == 0) { if (strcmp(magic, "P3") == 0) {
...@@ -433,7 +410,7 @@ int write_pbm_file(FILE *f, int *img_out, ...@@ -433,7 +410,7 @@ int write_pbm_file(FILE *f, int *img_out,
fprintf(f, "%d %d\n", x_scaled_size, y_scaled_size); fprintf(f, "%d %d\n", x_scaled_size, y_scaled_size);
/* Write the image data. */ /* Write the image data. */
for (i = 0; i < y_scaled_size; i++) { for (i = 0; i < y_scaled_size; ++i) {
for (j = 0; j < x_scaled_size; j+=step) { for (j = 0; j < x_scaled_size; j+=step) {
if (is_ascii == 1) { if (is_ascii == 1) {
fprintf(f, "%d ", img_out[i*x_scaled_size+j]); fprintf(f, "%d ", img_out[i*x_scaled_size+j]);
...@@ -485,7 +462,7 @@ int write_pgm_file(FILE *f, int *img_out, ...@@ -485,7 +462,7 @@ int write_pgm_file(FILE *f, int *img_out,
fprintf(f, "%d\n", img_colors); fprintf(f, "%d\n", img_colors);
/* Write the image data. */ /* Write the image data. */
for (i = 0; i < y_scaled_size; i++) { for (i = 0; i < y_scaled_size; ++i) {
for (j = 0; j < x_scaled_size; j++) { for (j = 0; j < x_scaled_size; j++) {
if (is_ascii == 1) { if (is_ascii == 1) {
fprintf(f, "%d ", img_out[i*x_scaled_size+j]); fprintf(f, "%d ", img_out[i*x_scaled_size+j]);
...@@ -531,7 +508,7 @@ int write_ppm_file(FILE *f, int *img_out, ...@@ -531,7 +508,7 @@ int write_ppm_file(FILE *f, int *img_out,
fprintf(f, "%d\n", img_colors); fprintf(f, "%d\n", img_colors);
/* Write the image data. */ /* Write the image data. */
for (i = 0; i < y_scaled_size; i++) { for (i = 0; i < y_scaled_size; ++i) {
for (j = 0; j < x_scaled_size; j++) { for (j = 0; j < x_scaled_size; j++) {
if (is_ascii == 1) { if (is_ascii == 1) {
fprintf(f, "%d %d %d ", fprintf(f, "%d %d %d ",
......
P5
# CREATOR: GIMP PNM Filter Version 1.1
100 100
255
[\[YXY\[^^]`]aaa`d_`ba_b`aad`ddagejhilpkjsuqnkqquypmstqrk{wrtxuxttvvww{{zxz{{w{|}}~XYYYZ[^_]\_[\^^]\baabb^bbfg`aggiii}ooitt}x~tq|xqlpozuptstzuu{uywxzyzxz}zz{{zz}|~X\Z]_[][\^__^^_`__a]f_ca_``\bee`dhwypp~kopzw~wpu|}vvwvwwvx|wy{{}y}|z~}}}~}~YZ[[\]][\]]\_]^```bc`_acbaaccbadwr{xrx~|uy~|zyqs|ux}{yyy~vuxux{wy}zz{z{}}}~WZ\\[[Z_aZ^]^_a^]]_``a_cbccdcbfn`mvw|ggdgo{yotuw{v{~xv{yxzy}x||{{z}~~~|~Z]]X^`^\^]`_``a_`a_^cbbbbhaeabhlninoTAE>;_]lok^gtmyvwzywxyz{zxwy~{|}y}~_[[[]]\```]]`a_]cbaa_`ccabdfbhlvxuqUA:9/36=CMRX_|wo~^`su{w~zzxz{|y{{||}}~~|~XZ[\_]]``a[]_^\__`Zdaa__eddbdabfxv\;6@ADB:2<D@J\d~nop}}}}}xyyxz|{}{|~~^\[Y\\Z\\^^^`^^^^^b^baacccegbfqil[D;EA:S@PLNMOakXlrxlmvtlQazyËzyxy|z{{||~|}}X\\][^]]Z^]\``_`_aab`abbcaefdheqYSE:NF28:;:GIKLGlfY`lo]MM>eoexi~y{||{~{||}~]`]Z\\`^^^]b_^a`aa]b`aaab`bccem^FJL?K4:QPdA;E[J@UJKWNehN]\Vgknsڲz|{}z~||}}~~YY^]^]\a`^_a^````^d_acbbfabdbfcYZ;9MKEPXu~f?]?YQl^G^>4>LK>QWSfjlzzzz|~||}}\][][\\a\_`\^[a^_b`b^bdabbg`gbWRHE<>RQ_rrrB<PfTQcNE=8=7:?SCPkbkiǫz|}}{~{~~~]]^\[_^\_Z]_adac]`bc_c`hfbefgdROI;A7NN\hsUK_UIKc@640-060<Vethgg{ǻ{xx}z|z~~}|[\\]]\Z^_^_^__a`\aa``^d`ddfggUAFZLI57LALkz{q^XhlbD:D7/5(3)-?<>YDa_qwȼy|{|~||~~\Y[\[Y`c_]\\_b^^]a``cccdgebg_I?CTZJG87B=Ubig^U\GO^P525F)/9::1B?^VhHgzҝ~}{{{||~Z\\\^b^\]a`b`da_a^_`bbebcbda^n_LMRLC<2+<MPXIDL@L`XV..8+0+I1"!9E33nuNWtͷ}z}{|~}}`\_^_\^]\Zcb`__`]`[j\bbadbg^VPZWHA<F;;/8>M@H;=BGF&6<>4**>(%35,87U\SRfɹzz~}~~[\ZaaZ^a^c^cdc`b_bbedecdee`IJ@CC@FNE?94*%7D4;59B4.+$2 %2?,.86239=6EZhk΢|}}~}}|^\\a\[`^][b__bad[ad``geedgZFLNID@:?27601 09/NENCUWA=;(%%&8)6+),:0.?\DSfrл|{|{|~|~]WZ]b`]]aa_ba`c_cbbdb_edf`IRHXD878.14($&0$./LIYOPVk_?/ 3C/"0/:<94Yea`axǑ{}}z}~{}~~][[Z^]]]]^_b\c_aa_d^_cffgUPPT=3/85-'#40)46411YVi^j{s+(,334(252::Dbvp|~ؙë~{|]]\]^^`_ab`^`]`c__eebbdg`VHK323812/&%*975.+309AFVTX;=P05+'8-618CNCx~aù͇|}~z\[`_`_Y[Z\_a\`_a^cbjdf`cGLF@/129*10-**,363CG+/;177+"12%91%*99407kuf~w~sw֣}}|~\^\]\^__b`__```dac`eadcRILB87398:*$/&(,1+/;5."2;/$%#5)-->( 306<6WivIRWjwl{׺}~~\]]]]]_]`^b`_b_a]bc_c\PHCE:;.3,=4)/.,&!(5=BL4)+'0%$#+,.5@(8/75KGM~aX\oY_JSlѶ~}|~Y\]_`^a[^a^\c^]c`afc_VHGH@A843=:,0*+&,.0&?J7;7)+.*,#/+3><66177?V^t@LlJRIX`x¦}ͣ|~~\\Z[]a_[^]cb`abdaace`ME2E<?5<<;6:/2/*1440::G;7+$)3*)*+=580F:;ATV]]g=<UBDDG^~ƮȚ}~~~~]]^]``]^]`ca^b]ab_d^ZQ0-B57/<0A?==9@F88;@?;/(.+710/1-4@9;HC?EDUR_hh@18AJGXZpqӖ~}\_\_][^\a\[acb_bccaaP2&0=55C5<>9<I<.4;H:25,&&14,172.0J437%8?LU_MYyV5;7@XbL[viy}\`]^b^]_aa^_a^abdb_\V8:7101@35G:P>*:A=40.9%./<95750-9DAN4/<>0LeVCPS`P,J`lnqSTwȤ{}}~~^]^_a]]cbb__]\^^`aa[QN9>&&,0,3IHL:/%-159345;5>B773.6IC4<=O246+_jFQPQfKZxsjj|~~~`]`bc]\^b`bbab^bea`VHH/1H%4,09?C<.2-26<8;""<GX>@;7<M?8>F78A>4:h?DMVNI^n~~~|~~[]^`a]^`aaa`bb_bb[ZKEK@+A61'*HFI2)7HE@>:,/*4DF:A=<7;K:DXhM?<<<3=B4?HRLRf}~zxŴ}{}~z}|~]\Z]aab``d_aa`]b^QM>=TG-@>/&4IBZ28;;FQ:'202HH>CIIB>7F@>DZtsaDK7_kC<D<TQ`kxʓ}|\Y[^]`^`\_^bbb`a[C>F3O>7=92<7CKN7=;F?:=?:JF=FGCMNG?7L9FBRUmpry~etfGJKsdС}z}}||^^^__b`]a_bdbceb`O@7.H;;@6;@G>PN-*+/8+$ -4DNQWSQLKD9M4EKTUYjrxroo_UU~xcisհ~}~}}~~[^]^`[[aacbc`bcbcO@4?;81=>,6O=JH6*-)4#'1FP\^caWSLRH9B4R_[W^[]}|nyIYpwr]t`~ظ}}~{{}}~]a_^a_a```_^c_bf`AAK246$=4'.S>EI5-4+8-9GUiqmkgZWTPU?EJXZ_f_YHSGPllDg|~ajvTiʢ~~||~{`^````b^_bdbb`bh`OMN263)0/''B24@D.-26@LZanqprkYVUW_HIRXQiaefWHNOihlR]suiJG\ƚz|}|}|`^a^a^cb_]`c\_cfTVYT:@5%(6+340IN23;:GWahrovqo^S_]dNAJ]dijkkcL_S_\CYvmxaf7SgН||xz|{}][`^]^c__aaccbbeNWV;[M5%$(0052?R67GCDQ\lqqosq\Y\ccSNGUfbowocRN[eGY|}xR[<.mkӵ|}}}|zy|]a^_`]_^_c`cccdcH\RI=;4'+)-%:,78>=KUKNbioos|sfg[ec^cQTWncmzYjpinXX~nukYEO+woΛ}}~}}z~`a`\a]c_`__aae`YMRE;=7?2-!,4:,&4JTJRTRVlvzw{ymkadoi_dY]asugTc_qkqI\|VVtv`B:F:^s¦~~~~~}_aa_d__]_dbd`ceY@>D8:==10/%17% :9OTSVgkqy{yqsw\t`pq`\ZQVQkebjxhNTZhpsGF79AT@uѱx|x|||}``_^dbf^aaibdca^6@?9QC"\tE 1;ELS_ijplryxz}uhcwyJY_RVTsseU{qtS?88GTE_ѧ}}y|||}}||}]^_]b]_]^_b^cbejG9=@7!% )ZbiN?6&<?FFMhwvro~|}y||_QpslopǖP:;9UbJS~գzz|y|}~|~z}`^_^^``_`caaQPZVL52/$!,!#GOxsm`^P4?JRUQScvtyxzy|zW_uĸۮ\-:PMHXboڕy~{yz}}|~~z~^a`a_aacbbbefQ:31--&))4' >qcJZdUJW^J^ic_[TR_kf}pon^K[b̾ǔjQB4;\cWaԓ|{{{}{{}z{~|}```_]`ffbbccefUB7-/8B>1%<|iw{~nZy}zhjc`_o}ysmzl|ȸ\:70:QaQWɓy{{||{}{{z}|}`]_^^aanle``]_d]OFWKI;!"$VvWh~|x~}}ylnnpucvtmhgcvxpɫmQK/;QfSi|yz|||y}{|}||^]\_a`]adeeeebac]_YZJ(7Xb~{}wm~slƑYT.DKiL~z{yyxz~}y|}]^_^_`aaabb]bbc`d_`K1(@Ywuhivrun߽woF6BNc^txv{yyy{{}}{y}\\\aaaa_]ab`da`dcabK* .>dv}~ztlnhkfZgnlZPuvys~D8GM_i|uxzzxzz~xwxv[_]_^^_\^b``cbaa`b^?0@Akwxvfny{usiSWMPlynqwfbdo{9@AQic|xz{u{wzzu{z{}x][\b__^_^]a_cbddfcb;&<L8ks{zx[Tml[XVONEU]Y`dwxils{ȍ1F@Ws|wxwyy{uu{{~xxys|^]^]aa]`]a^\dddecdi63JiBgyheQ<6;HIKPUhh}poǓzd^RG=HWlr8OIm}~yyxxvww~yuxxxzxx`[___b^a_cab``abddn@(<^n6^{wWPX^X]dagdrFnНxfelmsx]^LUsuvwuuxvz{x{wyvy\][[Z\_]_`^^_d^c`acK6CPc?n~{~{qioN_ž~UTlxvwvuvutwtwtzywy]\\\\_`[^^\``^`d`bkV=7NAArwBx߾ƽ[S~zwytvxwxvwywyxxvv`]^]^[^^^^_`ac^b^biMB??23}zJ[ǬIJӥtVijzuvuvwuzxqrwvwvx{_]_[__`_^[_b__abbbi`LBA:.tvjMsֶƼےlzXӮ|vusuxzwyyyswyuwx[]]]]_^_c``^a^_`bdagI>BH4hb{Jq̸}mSͥtwuwvuuwvtyyuwvuw[[[\^Z[_aa_ba^a_bd_deJHV7iVhxpzSŮ}vwwtsvwsvtwuuvwy[\[_]^_^a^_^`^`c`bdccWPJ=jav|uzw`eyʽ宀uZͣ~uxwuutuusvtutzuwY]^\_^][aab`eac`[_debh\K7Tmw|oqnqvspi__oz{Ƚ띆^}wqrwxvsrruvxxwxuZ[_Z]][\\]]^^]`\cbachd`Z=KZs~wxohvtrtx|rms|㪜_yxqutsorrsrrtptvr\^[[ZZb]]^^`_bab^_]`ad_^MNGEyWfq|q|ɾʳŴ{}yrusrossssruusouwvxXXX]]^]``\^^bc`_bb_`bab^XA@=qIr}nɯf|rnrnonlrnsosqtrvpsvuZUa^[Y`_]]_]c\bacb_cc`ba_-83~dQ{f|俼Ptwqsrnpnmqorutrrqquvyu_][][W^_\^[b_a^][_`]bb_\Y,B/q{~bRht𖕭mtrmlorvponoonsntorsvsqtYZ]]Y\[]\\a__]^[`^daac_SI,F?Uwk]nkjvߣ~hm|}pqonopmqprsqprptpqrsqqnYY\[_]]^\^]\_[^`a[^__b__UZ0\6~}}zt[YHhouÝ}aWoppnnmlnoquoqqprssqsqtx]\\_^Y_\^[\a\^a`]^___^`_ag)`4|}~yvsbb_mhgowrklmootornpopqpnotsqpsqrX]Z\\][[\X\\^_]\_a_a]d_`bbEWIsz{|w{v|ǾSrmmnlollnomprspnqrurqrqrso\Y[\YZ\Z^\]]\^]__^[[[ac``]_.[C|zxʿ~ZtknkmllnolqmppqronsrqppoppuVX\Y[[UV\_\^b[]\^a^]_^``abd6^Tuy}®ljnmllmqnnomlnpmnomqprtqpporp]Y[[Y[^][[Y][]_Y[\]]^^^_\\`\&gl~xux~~װMomkhmljpnnoloonnpopqmnpnqmomXWWZW[Z\_Y\][`YZ\[]c]^^_c^cbL8yvy{}ο֤Grlimjkjhihljjlllnooppqopmmpos[YXWX\X[ZZ\\\[\\\]]]\``__c_bd(l~¶l\qkehigkkjklinlmmpoompplpnspmV[W[XYZ[\][[X]X]]Z]Z^]^]c_cb$~~ts][_o̥DkrhkhkhkmjnlmommromnolminqsuX[YXYY\Y\\[^\[]W^][a\\_`cbS&" a|om[UN:))<HE@,3KsZ<hlffijhmijknnlhkknplmlkmmnmZZW\Y\[W\YX[^]`[^]a^]`c]cB$!)mkhNOLB-'.)1>QӨR5uVYspiiikhlllklmklknlllkkknmYW[`Z[YVX^\^ZX\Z]ZZZ][[eA!"# "2d}yojlpfj[GMJDBBtϮ X]rNPa7_mpmjfhomplpnlhkkmlillkV[WXXZ]_[V[[[YZ^Y]\\__a=$# !3R{}yxzumnppnkmdiejfdë6inWeATgNBCOkjljjiknkojoonqmmkkoVXZZYWXTY[YZ\]^[Z\Z[bK,.<Wm}zwvwvswsmbhbjsvlgzįϪ+)Mg_>OYgFG?GdomjhjkimkhqllgmlolXZZWWV]ZXZ\ZZZ[[\aa`6(!"+;SdouxstqnyxonhjmoչF**J\2MXgOHADCMgmjikjjllmkmkjmmmWXW\XYZZYZ\\Z[\\[^G' "/:Qaqqnrtxw|zvsniiqs}~B'%-JT2AZZEJIBC>>HcijijhiigjkjlmjYWZV[ZZWZ[YX[\Z^T4!):VZgrkiov}}zokms~ϑ; (Ea/=NSL?BDC?A?DRdkmhmokkkkjilWYVWYZWYWXZY\`Z=&!+;:[]ormgou}}{w~</I]1@FER9=FA>:@B@JYljeikkkjhjiUWV]XZZ\ZYZ\_E'!!-=6TXlkmunqy~yz}y5! *>^7<?7N79=?>>;;;>BPjrmjiihkkjXWUW]XZZXX`B*""(:5MZgimoktqzۙd) !+C_6::7I16898:73:8;BHexrllnhieXVSZX[Y_YE' %#&2:LSbehoojmwx|wχQ! #,JT4645C-2857316/273<IcoipphjfWVXW[^]@.&  3G>W]addhmkjru{{{xP&"&.PV0730<+334210//03377?Xz`OdkkTWYXY4**! 7C<QXfe``gihokosv{rqxҷשcE.LT1.3.6.12//.+0.,.2/69;QgsdZkVY\>,.#  7D=LU[kb[hgcmncimpkho|vpɫ޸N>%#2XT,,,42,*/-(+,,),/-3128>PWhyaXT4(#!2ABMRTcd_[_hfommjd_]gt满ƠiA4"(6ZJ0*(-0+,(,0&)/))+*+++68?IUftP.*!  4AF>YR]fjcb_dkqt~zuxޭӮU<)!&7\D0),/0.*+')*+%+(()(')/08=KXd+" !(AG;JTYfmlfc_am~xmry}үκO9';Y<+(/070*+%')++)%'(((**05=AKZ"# !>DF@TY^gnmhjefjxww{}tK< ,?O6)$+..1'')*&)'(''&'$'&,/9;AK
...@@ -101,6 +101,7 @@ def test_netpbm(): ...@@ -101,6 +101,7 @@ def test_netpbm():
transcode(test_utils.datafile('test.ppm', __name__)) # indexed, works fine transcode(test_utils.datafile('test.ppm', __name__)) # indexed, works fine
transcode(test_utils.datafile('test_2.pgm', __name__)) # indexed, works fine transcode(test_utils.datafile('test_2.pgm', __name__)) # indexed, works fine
transcode(test_utils.datafile('test_2.ppm', __name__)) # indexed, works fine transcode(test_utils.datafile('test_2.ppm', __name__)) # indexed, works fine
transcode(test_utils.datafile('test_spaces.pgm', __name__)) # indexed, works fine
# transcode(test_utils.datafile('test.jpg', __name__)) #does not work # transcode(test_utils.datafile('test.jpg', __name__)) #does not work
# because of re-compression # because of re-compression
...@@ -112,8 +113,8 @@ def notest_gif(): ...@@ -112,8 +113,8 @@ def notest_gif():
def test_image_load(): def test_image_load():
# test that the generic bob.io.image.load function works as expected # test that the generic bob.io.image.load function works as expected
for filename in ('test.jpg', 'cmyk.jpg', 'test.pbm', 'test_corrupted.pbm', for filename in ('test.jpg', 'cmyk.jpg', 'test.pbm', 'test_corrupted.pbm',
'test.pgm', 'test_corrupted.pgm', 'test.ppm', 'test_corrupted.ppm', 'test.pgm', 'test_corrupted.pgm', 'test_spaces.pgm', 'test.ppm',
'img_rgba_color.png', 'test.gif'): 'test_corrupted.ppm', 'img_rgba_color.png', 'test.gif'):
full_file = test_utils.datafile(filename, __name__) full_file = test_utils.datafile(filename, __name__)
# load with just image name # load with just image name
i1 = bob.io.image.load(full_file) i1 = bob.io.image.load(full_file)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment