source: gsdl/trunk/perllib/plugins/ImagePlugin.pm@ 18320

Last change on this file since 18320 was 18320, checked in by ak19, 15 years ago

Now plugins provide the option of base64 encoding or url encoding filenames that are to be renamed (when copied into the archives dir). Previously renamed files would always be url-encoded. URL-encoding is the default now for most plugins except MP3Plugin and OggVorbisPlugin, where the default is base64 encoding. Base64 encoding filenames upon renaming them was introduced so that more files that browsers try to open in external applications can open them, since url encoding does not seem to be implemented the same everywhere (for instance, windows media player is unable to handle url-encoded wmv filenames when such files are launched in it through the browser).

  • Property svn:keywords set to Author Date Id Revision
File size: 4.5 KB
RevLine 
[1733]1###########################################################################
2#
[16820]3# ImagePlugin.pm -- for processing standalone images
[1733]4# A component of the Greenstone digital library software
5# from the New Zealand Digital Library Project at the
6# University of Waikato, New Zealand.
7#
8# Copyright (C) 1999 New Zealand Digital Library Project
9#
10# This program is free software; you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 2 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program; if not, write to the Free Software
22# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23#
24###########################################################################
25
[15872]26package ImagePlugin;
[1733]27
[15872]28use BasePlugin;
29use ImageConverter;
[1733]30
[10254]31use strict;
32no strict 'refs'; # allow filehandles to be variables and viceversa
[16856]33no strict 'subs';
[10254]34
[16856]35use gsprintf 'gsprintf';
36
[1733]37sub BEGIN {
[15872]38 @ImagePlugin::ISA = ('BasePlugin', 'ImageConverter');
[1733]39}
40
[4744]41my $arguments =
42 [ { 'name' => "process_exp",
[15872]43 'desc' => "{BasePlugin.process_exp}",
[6408]44 'type' => "regexp",
[4744]45 'deft' => &get_default_process_exp(),
46 'reqd' => "no" },
[15872]47 ];
[1758]48
[15872]49my $options = { 'name' => "ImagePlugin",
50 'desc' => "{ImagePlugin.desc}",
[6408]51 'abstract' => "no",
[3540]52 'inherits' => "yes",
53 'args' => $arguments };
54
55
[1744]56
[1733]57sub new {
[10218]58 my ($class) = shift (@_);
59 my ($pluginlist,$inputargs,$hashArgOptLists) = @_;
60 push(@$pluginlist, $class);
[4724]61
[15872]62 push(@{$hashArgOptLists->{"ArgList"}},@{$arguments});
63 push(@{$hashArgOptLists->{"OptList"}},$options);
[2230]64
[15872]65 new ImageConverter($pluginlist, $inputargs, $hashArgOptLists);
66 my $self = new BasePlugin($pluginlist, $inputargs, $hashArgOptLists);
[1744]67
[1733]68 return bless $self, $class;
69}
70
[15872]71sub init {
72 my $self = shift (@_);
73 my ($verbosity, $outhandle, $failhandle) = @_;
74
75 $self->SUPER::init(@_);
76 $self->ImageConverter::init();
[17196]77 $self->{'cover_image'} = 0; # makes no sense for images
[15872]78}
79
[16847]80sub begin {
81 my $self = shift (@_);
82 my ($pluginfo, $base_dir, $processor, $maxdocs) = @_;
83
[16849]84 $self->SUPER::begin(@_);
[17250]85 $self->ImageConverter::begin(@_);
[16847]86}
87
[1733]88sub get_default_process_exp {
89 my $self = shift (@_);
90
[17666]91 # from .jpf and onwards below, the file extensions are for JPEG2000
92 return q^(?i)(\.jpe?g|\.gif|\.png|\.bmp|\.xbm|\.tif?f|\.jpf|\.jpx|\.jp2|\.jpc|\.j2k|\.pnm|\.pgx)$^;
[1733]93}
94
[9067]95# this makes no sense for images
96sub block_cover_image
97{
98 my $self =shift (@_);
99 my ($filename) = @_;
[2230]100
[9067]101 return;
102}
[2230]103
[15872]104# do plugin specific processing of doc_obj
105sub process {
[1733]106 my $self = shift (@_);
[15872]107 # options??
108 my ($pluginfo, $base_dir, $file, $metadata, $doc_obj, $gli) = @_;
109
[16820]110
[2230]111 my $outhandle = $self->{'outhandle'};
[16383]112 my ($filename_full_path, $filename_no_path) = &util::get_full_filenames($base_dir, $file);
[16820]113
[16010]114 if ($self->{'image_conversion_available'} == 1) {
[16768]115 my $utf8_filename_no_path = $self->filepath_to_utf8($filename_no_path);
[18320]116 my $url_encoded_filename = &util::rename_file($utf8_filename_no_path, $self->{'file_rename_method'});
[16768]117 $self->generate_images($filename_full_path, $url_encoded_filename, $doc_obj, $doc_obj->get_top_section()); # should we check the return value?
[15872]118 } else {
[16856]119 if ($gli) {
120 &gsprintf(STDERR, "<Warning p='ImagePlugin' r='{ImageConverter.noconversionavailable}: {ImageConverter.".$self->{'no_image_conversion_reason'}."}'>");
121 }
[17483]122 # all we do is add the original image as an associated file, and set up srclink etc
123 my $assoc_file = $doc_obj->get_assocfile_from_sourcefile();
124 my $section = $doc_obj->get_top_section();
125
126 $doc_obj->associate_file($filename_full_path, $assoc_file, "", $section);
127
128 $doc_obj->add_metadata ($section, "srclink", "<a href=\"_httpprefix_/collect/[collection]/index/assoc/[assocfilepath]/[SourceFile]\">");
129 $doc_obj->add_metadata ($section, "/srclink", "</a>");
130 $doc_obj->add_metadata ($section, "srcicon", "<img src=\"_httpprefix_/collect/[collection]/index/assoc/[assocfilepath]/[SourceFile]\" width=\"100\">");
131
[2230]132 }
[15872]133 #we have no text - adds dummy text and NoText metadata
134 $self->add_dummy_text($doc_obj, $doc_obj->get_top_section());
[2230]135
[15872]136 return 1;
[4724]137
[3137]138}
[2230]139
[15872]140sub clean_up_after_doc_obj_processing {
[14951]141 my $self = shift(@_);
[1733]142
[15872]143 $self->ImageConverter::clean_up_temporary_files();
[1733]144}
145
1461;
[4724]147
148
149
150
151
152
153
154
155
156
157
Note: See TracBrowser for help on using the repository browser.