Praca z obrazami z zadań skryptu
Bazy danych produktów lub użytkownicy często zawiera obrazy oprócz danych tekstowych i liczbowych.System.Drawing Nazw w programie Microsoft.NET Framework udostępnia klasy do manipulowania obrazami.
Przykład 1: Konwersję obrazów w formacie JPEG
Przykład 2: Utwórz i Zapisz miniatur
Ostrzeżenie
Aby utworzyć zadanie łatwiej można użyć ponownie w wielu pakietach, należy rozważyć przy użyciu kodu w tym przykładzie zadanie skryptu jako punktu wyjścia dla niestandardowego zadania.Aby uzyskać więcej informacji, zobacz Opracowywania niestandardowego zadania.
Opis przykład 1: Konwersję obrazów w formacie JPEG
Poniższy przykład otwiera plik obrazu określony przez zmienną i zapisuje go jako plik JPEG skompresowany przy użyciu kodera.Kod, aby pobrać koder informacji jest hermetyzowany w funkcja prywatnych.
Aby skonfigurować ten przykład zadania skryptu do użytku z pojedynczego pliku obrazu
Utwórz zmienną ciąg o nazwie CurrentImageFile i zestaw jej wartość na ścieżka i nazwę istniejącego pliku obrazu.
Na skryptu strona Script Editor zadania, dodać CurrentImageFile do zmiennej ReadOnlyVariables właściwość.
W projekcie skryptu zestaw odwołanie do System.Drawing obszaru nazw.
W kodzie, użyj Imports instrukcji, aby zaimportować System.Drawing i System.IO obszarów nazw.
Aby skonfigurować ten przykład zadania skryptu do użytku z wielu plików obrazów
Umieścić zadania skryptu kontener Foreach pętli.
Na kolekcji strona Edytor pętli Foreach, zaznacz Modułu wyliczającego pliku Foreach jako numerator i określ ścieżka i maska źródło pliki, takie jak "*.bmp."
Na Mapowań zmiennej strona, mapować CurrentImageFile zmiennej indeksu 0.Ta zmienna przekazuje zadanie skryptu w każdej iteracji modułu wyliczającego bieżącej nazwy pliku.
Ostrzeżenie
Te kroki są oprócz kroki opisane w procedurze do użytku z pojedynczego pliku obrazu.
Kod przykładowy 1
Public Sub Main()
'Create and initialize variables.
Dim currentFile As String
Dim newFile As String
Dim bmp As Bitmap
Dim eps As New Imaging.EncoderParameters(1)
Dim ici As Imaging.ImageCodecInfo
Dim supportedExtensions() As String = _
{".BMP", ".GIF", ".JPG", ".JPEG", ".EXIF", ".PNG", _
".TIFF", ".TIF", ".ICO", ".ICON"}
Try
'Store the variable in a string for local manipulation.
currentFile = Dts.Variables("CurrentImageFile").Value.ToString
'Check the extension of the file against a list of
'files that the Bitmap class supports.
If Array.IndexOf(supportedExtensions, _
Path.GetExtension(currentFile).ToUpper) > -1 Then
'Load the file.
bmp = New Bitmap(currentFile)
'Calculate the new name for the compressed image.
'Note: This will overwrite existing JPEGs.
newFile = Path.Combine( _
Path.GetDirectoryName(currentFile), _
String.Concat(Path.GetFileNameWithoutExtension(currentFile), _
".jpg"))
'Specify the compression ratio (0=worst quality, 100=best quality).
eps.Param(0) = New Imaging.EncoderParameter( _
Imaging.Encoder.Quality, 75)
'Retrieve the ImageCodecInfo associated with the jpeg format.
ici = GetEncoderInfo("image/jpeg")
'Save the file, compressing it into the jpeg encoding.
bmp.Save(newFile, ici, eps)
Else
'The file is not supported by the Bitmap class.
Dts.Events.FireWarning(0, "Image Resampling Sample", _
"File " & currentFile & " is not a supported format.", _
"", 0)
End If
Dts.TaskResult = ScriptResults.Success
Catch ex As Exception
'An error occurred.
Dts.Events.FireError(0, "Image Resampling Sample", _
ex.Message & ControlChars.CrLf & ex.StackTrace, _
String.Empty, 0)
Dts.TaskResult = ScriptResults.Failure
End Try
End Sub
Private Function GetEncoderInfo(ByVal mimeType As String) As Imaging.ImageCodecInfo
'The available image codecs are returned as an array,
'which requires code to iterate until the specified codec is found.
Dim count As Integer
Dim encoders() As Imaging.ImageCodecInfo
encoders = Imaging.ImageCodecInfo.GetImageEncoders()
For count = 0 To encoders.Length
If encoders(count).MimeType = mimeType Then
Return encoders(count)
End If
Next
'This point is only reached if a codec is not found.
Err.Raise(513, "Image Resampling Sample", String.Format( _
"The {0} codec is not available. Unable to compress file.", _
mimeType))
Return Nothing
End Function
Opis przykład 2: Utwórz i Zapisz miniatur
Poniższy przykład otwiera plik obrazu określony przez zmienną, tworzy miniaturę obrazu, zachowując stała proporcje i zapisuje miniatury pod nazwą zmodyfikowanego pliku.Kod, który oblicza wysokość i szerokość miniatury, zachowując stała współczynnik proporcji jest hermetyzowany w prywatnej programowego.
Aby skonfigurować ten przykład zadania skryptu do użytku z pojedynczego pliku obrazu
Utwórz zmienną ciąg o nazwie CurrentImageFile i zestaw jej wartość na ścieżka i nazwę istniejącego pliku obrazu.
Również utworzyć MaxThumbSize Zmienna typu Liczba całkowita i przypisz wartość w pikselach, takie jak 100.
Na skryptu strona Script Editor zadania, dodać zarówno zmienne ReadOnlyVariables właściwość.
W projekcie skryptu zestaw odwołanie do System.Drawing obszaru nazw.
W kodzie, użyj Imports instrukcji, aby zaimportować System.Drawing i System.IO obszarów nazw.
Aby skonfigurować ten przykład zadania skryptu do użytku z wielu plików obrazów
Umieścić zadania skryptu kontener Foreach pętli.
Na kolekcji strona Edytor pętli Foreach, zaznacz Modułu wyliczającego pliku Foreach jako modułu wyliczającegoi określ ścieżka i maska źródło pliki, takie jak "*.jpg."
Na Mapowań zmiennej strona, mapować CurrentImageFile zmiennej indeksu 0.Ta zmienna przekazuje zadanie skryptu w każdej iteracji modułu wyliczającego bieżącej nazwy pliku.
Ostrzeżenie
Te kroki są oprócz kroki opisane w procedurze do użytku z pojedynczego pliku obrazu.
Kod przykładowy 2
Public Sub Main()
Dim currentImageFile As String
Dim currentImage As Image
Dim maxThumbSize As Integer
Dim thumbnailImage As Image
Dim thumbnailFile As String
Dim thumbnailHeight As Integer
Dim thumbnailWidth As Integer
currentImageFile = Dts.Variables("CurrentImageFile").Value.ToString
thumbnailFile = Path.Combine( _
Path.GetDirectoryName(currentImageFile), _
String.Concat(Path.GetFileNameWithoutExtension(currentImageFile), _
"_thumbnail.jpg"))
Try
currentImage = Image.FromFile(currentImageFile)
maxThumbSize = CType(Dts.Variables("MaxThumbSize").Value, Integer)
CalculateThumbnailSize( _
maxThumbSize, currentImage, thumbnailWidth, thumbnailHeight)
thumbnailImage = currentImage.GetThumbnailImage( _
thumbnailWidth, thumbnailHeight, Nothing, Nothing)
thumbnailImage.Save(thumbnailFile)
Dts.TaskResult = ScriptResults.Success
Catch ex As Exception
Dts.Events.FireError(0, "Script Task Example", _
ex.Message & ControlChars.CrLf & ex.StackTrace, _
String.Empty, 0)
Dts.TaskResult = ScriptResults.Failure
End Try
End Sub
Private Sub CalculateThumbnailSize( _
ByVal maxSize As Integer, ByVal sourceImage As Image, _
ByRef thumbWidth As Integer, ByRef thumbHeight As Integer)
If sourceImage.Width > sourceImage.Height Then
thumbWidth = maxSize
thumbHeight = CInt((maxSize / sourceImage.Width) * sourceImage.Height)
Else
thumbHeight = maxSize
thumbWidth = CInt((maxSize / sourceImage.Height) * sourceImage.Width)
End If
End Sub
bool ThumbnailCallback()
{
return false;
}
public void Main()
{
string currentImageFile;
Image currentImage;
int maxThumbSize;
Image thumbnailImage;
string thumbnailFile;
int thumbnailHeight = 0;
int thumbnailWidth = 0;
currentImageFile = Dts.Variables["CurrentImageFile"].Value.ToString();
thumbnailFile = Path.Combine(Path.GetDirectoryName(currentImageFile), String.Concat(Path.GetFileNameWithoutExtension(currentImageFile), "_thumbnail.jpg"));
try
{
currentImage = Image.FromFile(currentImageFile);
maxThumbSize = (int)Dts.Variables["MaxThumbSize"].Value;
CalculateThumbnailSize(maxThumbSize, currentImage, ref thumbnailWidth, ref thumbnailHeight);
Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
thumbnailImage = currentImage.GetThumbnailImage(thumbnailWidth, thumbnailHeight, ThumbnailCallback, IntPtr.Zero);
thumbnailImage.Save(thumbnailFile);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Script Task Example", ex.Message + "\r" + ex.StackTrace, String.Empty, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
private void CalculateThumbnailSize(int maxSize, Image sourceImage, ref int thumbWidth, ref int thumbHeight)
{
if (sourceImage.Width > sourceImage.Height)
{
thumbWidth = maxSize;
thumbHeight = (int)(sourceImage.Height * maxSize / sourceImage.Width);
}
else
{
thumbHeight = maxSize;
thumbWidth = (int)(sourceImage.Width * maxSize / sourceImage.Height);
}
}
|