Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) |
The CORE
|
package Contenido::Type::Image;
#-------------------------------------------------------------------------------
# ��� ������ - ����
#-------------------------------------------------------------------------------
use strict;
use warnings;
use Contenido::Globals;
use Contenido::File;
use Image::Size;
use base qw/Contenido::Type::File/;
#-------------------------------------------------------------------------------
#
sub new {
my ($prototype, $properties) = @_;
warn '����������� �������� �������� �����������: #0001' unless $properties || ref $properties;
$properties = {
properties => $properties,
width => undef,
height => undef,
alt => undef,
mini => {},
};
my $self = SUPER::new($prototype, $properties)
return $self;
}
#-------------------------------------------------------------------------------
# ������������� ������� ��������� - �� ������
sub restrict_properties {
my ($self, $properties) = @_;
warn '����������� �������� �������� �����������: #0002' unless $properties || ref $properties;
foreach my $key (keys %{$properties}) {
}
return $self;
}
#-------------------------------------------------------------------------------
# �������������� ������
sub more_info {
my ($self) = @_;
($self->{'width'}, $self->{'height'}) = Image::Size::imgsize($self->{'file_local'}) || return undef;
return 1;
}
#-------------------------------------------------------------------------------
sub create_preview {
my ($self, $filename) = @_;
$filename ||= '/images/'.$self->filename_default;
# ������� ������ ���������
foreach my $key (keys {$self->{'mini'}}) {
next if $key eq 'filename' || $key eq 'width' || $key eq 'height' || $key eq 'alt';
Contenido::File::remove($self->{'mini'}->{$key}->{'filename'});
delete $self->{'mini'}->{$key};
}
$self->{'mini'} = {};
# ��������� ����� ���������
my @preview = $self->{'properties'}->{'preview'} && ref $self->{'properties'}->{'preview'} && ref $self->{'properties'}->{'preview'} eq 'ARRAY' ?
@{$self->{'properties'}->{'preview'}} : ($self->{'properties'}->{'preview'} || $keeper->{'preview'});
foreach my $preview (@preview) {
substr (my $file_preview = $self->{'file_local'}, (- 1 - (length $self->{'ext'})), 0 , '.'.$preview);
my $command = $state->{'convert_binary'}.' -geometry \''.$preview.'\' -quality 80 '.$self->{'file_local'}.' '.$file_preview;
my $result = `$command`;
substr (my $filename_preview = $filename, (- 1 - (length $self->{'ext'})), 0 , $preview);
if (Contenido::File::store($filename_preview, $file_preview)) {
$self->{'mini'}->{$key}->{'filename'} = $storage.'.'.$self->{'ext'};
$self->{'mini'}->{$key}->{'size'} = (stat $file_preview)[7];
$self->{'mini'}->{$key}->{'ext'} = $self->{'ext'};
unlink $file_preview;
($self->{'mini'}->{$key}->{'width'}, $self->{'mini'}->{$key}->{'height'}) = Image::Size::imgsize($self->{'file_local'}) || return undef;
}
}
@{%{$self->{'mini'}}}{'filename', 'width', 'height', 'size', 'ext', 'alt'} = @{%{$self->{'mini'}{$preview[0]}}}{'filename', 'width', 'height', 'size', 'ext', 'alt'};
return 1;
}
#-------------------------------------------------------------------------------
sub store {
my ($self, $filename) = @_;
$self->create_preview($filename);
return $self->SUPER::store;
}
#-------------------------------------------------------------------------------
sub remove {
my ($self) = @_;
return $self->SUPER::remove;
}
1;