void slideshow_save_image(winwidget win) { char *tmpname; Imlib_Load_Error err; if (win->file) { tmpname = feh_unique_filename("", FEH_FILE(win->file->data)->name); } else if (mode) { char *tmp; tmp = estrjoin(".", mode, "png", NULL); tmpname = feh_unique_filename("", tmp); free(tmp); } else { tmpname = feh_unique_filename("", "noname.png"); } if (opt.verbose) fprintf(stderr, "saving image to filename '%s'\n", tmpname); ungib_imlib_save_image_with_error_return(win->im, tmpname, &err); if (err) feh_imlib_print_load_error(tmpname, win, err); free(tmpname); return; }
void feh_edit_inplace(winwidget w, int op) { int tmp; Imlib_Image old = NULL; Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename) return; if (!strcmp(gib_imlib_image_format(w->im), "jpeg") && !path_is_url(FEH_FILE(w->file->data)->filename)) { feh_edit_inplace_lossless(w, op); feh_reload_image(w, 1, 1); return; } old = imlib_load_image_with_error_return(FEH_FILE(w->file->data)->filename, &err); if ((old != NULL) && (err == IMLIB_LOAD_ERROR_NONE)) { imlib_context_set_image(old); if (op == INPLACE_EDIT_FLIP) imlib_image_flip_vertical(); else if (op == INPLACE_EDIT_MIRROR) imlib_image_flip_horizontal(); else imlib_image_orientate(op); gib_imlib_save_image_with_error_return(old, FEH_FILE(w->file->data)->filename, &err); gib_imlib_free_image(old); if (err) feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename, w, err); feh_reload_image(w, 1, 1); } else { /* * Image was opened using curl/magick or has been deleted after * opening it */ imlib_context_set_image(w->im); if (op == INPLACE_EDIT_FLIP) imlib_image_flip_vertical(); else if (op == INPLACE_EDIT_MIRROR) imlib_image_flip_horizontal(); else { imlib_image_orientate(op); tmp = w->im_w; FEH_FILE(w->file->data)->info->width = w->im_w = w->im_h; FEH_FILE(w->file->data)->info->height = w->im_h = tmp; } im_weprintf(w, "unable to edit in place. Changes have not been saved."); winwidget_render_image(w, 1, 0); } return; }
void feh_edit_inplace(winwidget w, int op) { int ret; Imlib_Image old; Imlib_Load_Error err; if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename) return; if (!strcmp(gib_imlib_image_format(w->im), "jpeg")) { feh_edit_inplace_lossless(w, op); feh_reload_image(w, 1, 1); return; } ret = feh_load_image(&old, FEH_FILE(w->file->data)); if (ret) { if (op == INPLACE_EDIT_FLIP) { imlib_context_set_image(old); imlib_image_flip_vertical(); } else if (op == INPLACE_EDIT_MIRROR) { imlib_context_set_image(old); imlib_image_flip_horizontal(); } else gib_imlib_image_orientate(old, op); ungib_imlib_save_image_with_error_return(old, FEH_FILE(w->file->data)->filename, &err); gib_imlib_free_image(old); if (err) feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename, w, err); feh_reload_image(w, 1, 1); } else { im_weprintf(w, "failed to load image from disk to edit it in place"); } return; }
int feh_load_image(Imlib_Image * im, feh_file * file) { Imlib_Load_Error err; enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK } image_source = SRC_IMLIB; char *tmpname = NULL; char *real_filename = NULL; D(("filename is %s, image is %p\n", file->filename, im)); if (!file || !file->filename) return 0; /* Handle URLs */ if ((!strncmp(file->filename, "http://", 7)) || (!strncmp(file->filename, "https://", 8)) || (!strncmp(file->filename, "ftp://", 6))) { image_source = SRC_HTTP; if ((tmpname = feh_http_load_image(file->filename)) == NULL) err = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST; } else *im = imlib_load_image_with_error_return(file->filename, &err); if ((err == IMLIB_LOAD_ERROR_UNKNOWN) || (err == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT)) { image_source = SRC_MAGICK; tmpname = feh_magick_load_image(file->filename); } if ((image_source != SRC_IMLIB) && tmpname) { *im = imlib_load_image_with_error_return(tmpname, &err); if (im) { real_filename = file->filename; file->filename = tmpname; feh_file_info_load(file, *im); file->filename = real_filename; #ifdef HAVE_LIBEXIF file->ed = exif_get_data(tmpname); #endif } if ((image_source == SRC_MAGICK) || !opt.keep_http) unlink(tmpname); free(tmpname); } if ((err) || (!im)) { if (opt.verbose && !opt.quiet) { fputs("\n", stdout); reset_output = 1; } feh_imlib_print_load_error(file->filename, NULL, err); D(("Load *failed*\n")); return(0); } #ifdef HAVE_LIBEXIF file->ed = exif_get_data(file->filename); #endif D(("Loaded ok\n")); return(1); }
int feh_load_image(Imlib_Image * im, feh_file * file) { Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK } image_source = SRC_IMLIB; char *tmpname = NULL; char *real_filename = NULL; #ifdef HAVE_LIBEXIF ExifEntry *entry; #endif D(("filename is %s, image is %p\n", file->filename, im)); if (!file || !file->filename) return 0; if (path_is_url(file->filename)) { image_source = SRC_HTTP; if ((tmpname = feh_http_load_image(file->filename)) == NULL) err = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST; } else *im = imlib_load_image_with_error_return(file->filename, &err); if ((err == IMLIB_LOAD_ERROR_UNKNOWN) || (err == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT)) { image_source = SRC_MAGICK; tmpname = feh_magick_load_image(file->filename); } if ((image_source != SRC_IMLIB) && tmpname) { *im = imlib_load_image_with_error_return(tmpname, &err); if (im) { real_filename = file->filename; file->filename = tmpname; feh_file_info_load(file, *im); file->filename = real_filename; #ifdef HAVE_LIBEXIF file->ed = exif_get_data(tmpname); #endif } if ((image_source == SRC_MAGICK) || !opt.keep_http) unlink(tmpname); free(tmpname); } if ((err) || (!im)) { if (opt.verbose && !opt.quiet) { fputs("\n", stdout); reset_output = 1; } feh_imlib_print_load_error(file->filename, NULL, err); D(("Load *failed*\n")); return(0); } #ifdef HAVE_LIBEXIF file->ed = exif_get_data(file->filename); if (file->ed) { entry = exif_content_get_entry(file->ed->ifd[EXIF_IFD_0], 0x0112); if (entry != NULL) { if (*(entry->data) == 3) gib_imlib_image_orientate(*im, 2); else if (*(entry->data) == 6) gib_imlib_image_orientate(*im, 1); else if (*(entry->data) == 8) gib_imlib_image_orientate(*im, 3); } } #endif D(("Loaded ok\n")); return(1); }