use cairo_image_surface_write_to_jpeg_mem() instead of cairo_image_surface_write_to_jpeg(), avoid temp files
This commit is contained in:
parent
2ea5c7af04
commit
9a59679dcf
|
|
@ -141,13 +141,15 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2)
|
||||||
int png_size_x, png_size_y;
|
int png_size_x, png_size_y;
|
||||||
unsigned char *png_data, BG_r, BG_g, BG_b;
|
unsigned char *png_data, BG_r, BG_g, BG_b;
|
||||||
const char *invertImage;
|
const char *invertImage;
|
||||||
static char str[PATH_MAX];
|
/* static char str[PATH_MAX];
|
||||||
unsigned char* jpgData;
|
* FILE* fp;
|
||||||
FILE* fp;
|
*/
|
||||||
unsigned char* hexEncodedJPG;
|
unsigned char* hexEncodedJPG;
|
||||||
long fileSize;
|
|
||||||
const char* image_data64_ptr;
|
const char* image_data64_ptr;
|
||||||
cairo_surface_t* surface;
|
cairo_surface_t* surface;
|
||||||
|
unsigned char* jpgData = NULL;
|
||||||
|
size_t fileSize = 0;
|
||||||
|
|
||||||
my_strdup(59, &filter, get_tok_value(r->prop_ptr, "filter", 0));
|
my_strdup(59, &filter, get_tok_value(r->prop_ptr, "filter", 0));
|
||||||
|
|
||||||
image_data64_ptr = get_tok_value(r->prop_ptr, "image_data", 0);
|
image_data64_ptr = get_tok_value(r->prop_ptr, "image_data", 0);
|
||||||
|
|
@ -166,7 +168,7 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2)
|
||||||
closure.pos = 0;
|
closure.pos = 0;
|
||||||
closure.size = data_size; /* should not be necessary */
|
closure.size = data_size; /* should not be necessary */
|
||||||
surface = cairo_image_surface_create_from_png_stream(png_reader, &closure);
|
surface = cairo_image_surface_create_from_png_stream(png_reader, &closure);
|
||||||
|
my_free(1666, &closure.buffer);
|
||||||
png_size_x = cairo_image_surface_get_width(surface);
|
png_size_x = cairo_image_surface_get_width(surface);
|
||||||
png_size_y = cairo_image_surface_get_height(surface);
|
png_size_y = cairo_image_surface_get_height(surface);
|
||||||
|
|
||||||
|
|
@ -202,18 +204,19 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cairo_surface_mark_dirty(surface);
|
cairo_surface_mark_dirty(surface);
|
||||||
my_snprintf(str, S(str), "%s%s", tclgetvar("XSCHEM_TMP_DIR"), "/temp.jpg");
|
cairo_image_surface_write_to_jpeg_mem(surface, &jpgData, &fileSize, 100);
|
||||||
cairo_image_surface_write_to_jpeg(surface, str, 100);
|
/*
|
||||||
fp = fopen(str, "rb"); /* Open the file for reading */
|
* my_snprintf(str, S(str), "%s%s", tclgetvar("XSCHEM_TMP_DIR"), "/temp.jpg");
|
||||||
fseek(fp, 0L, SEEK_END);
|
* cairo_image_surface_write_to_jpeg(surface, str, 100);
|
||||||
fileSize = ftell(fp);
|
* fp = fopen(str, "rb");
|
||||||
rewind(fp);
|
* fseek(fp, 0L, SEEK_END);
|
||||||
jpgData = my_malloc(1662, fileSize);
|
* fileSize = ftell(fp);
|
||||||
fread(jpgData, sizeof(jpgData[0]), fileSize, fp);
|
* rewind(fp);
|
||||||
fclose(fp);
|
* jpgData = my_malloc(1662, fileSize);
|
||||||
|
* fread(jpgData, sizeof(jpgData[0]), fileSize, fp);
|
||||||
|
* fclose(fp);
|
||||||
|
*/
|
||||||
hexEncodedJPG = bin2hex(jpgData, fileSize);
|
hexEncodedJPG = bin2hex(jpgData, fileSize);
|
||||||
|
|
||||||
fprintf(fd, "gsave\n");
|
fprintf(fd, "gsave\n");
|
||||||
fprintf(fd, "%g %g translate\n", X_TO_PS(x1), Y_TO_PS(y1));
|
fprintf(fd, "%g %g translate\n", X_TO_PS(x1), Y_TO_PS(y1));
|
||||||
fprintf(fd, "%g %g scale\n", X_TO_PS(x2) - X_TO_PS(x1), Y_TO_PS(y2) - Y_TO_PS(y1));
|
fprintf(fd, "%g %g scale\n", X_TO_PS(x2) - X_TO_PS(x1), Y_TO_PS(y2) - Y_TO_PS(y1));
|
||||||
|
|
@ -231,7 +234,8 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2)
|
||||||
fprintf(fd, "3\n");
|
fprintf(fd, "3\n");
|
||||||
fprintf(fd, "colorimage\n");
|
fprintf(fd, "colorimage\n");
|
||||||
fprintf(fd, "grestore\n");
|
fprintf(fd, "grestore\n");
|
||||||
my_free(1663, &hexEncodedJPG); my_free(1664, &jpgData);
|
my_free(1663, &hexEncodedJPG);
|
||||||
|
free(jpgData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -243,10 +247,12 @@ void ps_embedded_graph(xRect* r, double rx1, double ry1, double rx2, double ry2)
|
||||||
int save_draw_window, save_draw_grid, rwi, rhi;
|
int save_draw_window, save_draw_grid, rwi, rhi;
|
||||||
const double max_size = 2000.0;
|
const double max_size = 2000.0;
|
||||||
int d_c;
|
int d_c;
|
||||||
static char str[PATH_MAX];
|
unsigned char* jpgData = NULL;
|
||||||
unsigned char* jpgData;
|
size_t fileSize = 0;
|
||||||
FILE* fp;
|
/*
|
||||||
long fileSize;
|
* FILE* fp;
|
||||||
|
* static char str[PATH_MAX];
|
||||||
|
*/
|
||||||
unsigned char *hexEncodedJPG;
|
unsigned char *hexEncodedJPG;
|
||||||
if (!has_x) return;
|
if (!has_x) return;
|
||||||
rw = fabs(rx2 - rx1);
|
rw = fabs(rx2 - rx1);
|
||||||
|
|
@ -294,16 +300,18 @@ void ps_embedded_graph(xRect* r, double rx1, double ry1, double rx2, double ry2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
my_snprintf(str, S(str), "%s%s", tclgetvar("XSCHEM_TMP_DIR"), "/temp.jpg");
|
cairo_image_surface_write_to_jpeg_mem(png_sfc, &jpgData, &fileSize, 100);
|
||||||
cairo_image_surface_write_to_jpeg(png_sfc, str, 100);
|
/*
|
||||||
|
* my_snprintf(str, S(str), "%s%s", tclgetvar("XSCHEM_TMP_DIR"), "/temp.jpg");
|
||||||
fp = fopen(str, "rb");
|
* cairo_image_surface_write_to_jpeg(png_sfc, str, 100);
|
||||||
fseek(fp, 0L, SEEK_END);
|
* fp = fopen(str, "rb");
|
||||||
fileSize = ftell(fp);
|
* fseek(fp, 0L, SEEK_END);
|
||||||
rewind(fp);
|
* fileSize = ftell(fp);
|
||||||
jpgData = my_malloc(1668, fileSize);
|
* rewind(fp);
|
||||||
fread(jpgData, sizeof(jpgData[0]), fileSize, fp);
|
* jpgData = my_malloc(1668, fileSize);
|
||||||
fclose(fp);
|
* fread(jpgData, sizeof(jpgData[0]), fileSize, fp);
|
||||||
|
* fclose(fp);
|
||||||
|
*/
|
||||||
|
|
||||||
hexEncodedJPG = bin2hex(jpgData, fileSize);
|
hexEncodedJPG = bin2hex(jpgData, fileSize);
|
||||||
|
|
||||||
|
|
@ -335,7 +343,8 @@ void ps_embedded_graph(xRect* r, double rx1, double ry1, double rx2, double ry2)
|
||||||
fprintf(fd, "3\n");
|
fprintf(fd, "3\n");
|
||||||
fprintf(fd, "colorimage\n");
|
fprintf(fd, "colorimage\n");
|
||||||
fprintf(fd, "grestore\n");
|
fprintf(fd, "grestore\n");
|
||||||
my_free(1666, &hexEncodedJPG); my_free(1667, &jpgData);
|
my_free(1666, &hexEncodedJPG);
|
||||||
|
free(jpgData);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
static void set_lw(void)
|
static void set_lw(void)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue