Udostępnij za pośrednictwem


Praca z obrazów z zadaniem skryptów

Bazę danych produktów lub użytkownicy często zawiera obrazy, oprócz danych tekstowych i liczbowych.The System.Drawing namespace in the Microsoft .NET Framework provides classes for manipulating images.

Przykład 1: Konwertować obrazy na JPEG format

Przykład 2: Tworzenie i zapisywanie obrazów miniatur

Uwaga

Jeśli chcesz utworzyć zadanie, które łatwo można używać w wielu pakietów, należy rozważyć przy użyciu kodu w tym przykładzie skrypt zadanie jako punkt początkowy dla niestandardowego zadania.Aby uzyskać więcej informacji zobaczOpracowywania niestandardowego zadania.

Opis przykład 1: Konwertować obrazy na JPEG format

Poniższy przykład otwiera plik obrazu, określonej przez zmienną i zapisuje go w skompresowanym pliku JPEG za pomocą kodera.Kod, który chcesz pobrać koder informacji są hermetyzowane w funkcja prywatnych.

Aby skonfigurować ten przykład zadania skryptu do użytku z jednego obrazu

  1. Tworzenie zmiennej ciąg o nazwie CurrentImageFile i ustawić jej wartość na ścieżka i nazwę istniejącego pliku obrazu.

  2. Na Skrypt stronaEdytor zadań skryptu, add the CurrentImageFile zmienne do ReadOnlyVariables Właściwość.

  3. W projekcie skryptu zestaw odwołanie do System.Drawing obszar nazw.

  4. W kodzie należy użyć Imports instrukcje, aby zaimportować System.Drawing i System.IO obszary nazw.

Aby skonfigurować ten przykład zadania skryptu do użytku z wielu plików obrazów

  1. Umieść zadanie skryptów znajdujące się w kontenerze Foreach pętli.

  2. Na Kolekcja stronaEdytor foreach pętli, zaznacz Moduł wyliczający plik foreach jako numerator i określ ścieżka i maski z urządzenie źródłowe pliki, takie jak "*.bmp. „

  3. Na Zmienna mapowania strona, mapowanie CurrentImageFile Zmienna indeksu 0. Ta zmienna przekazuje zadanie skryptu w każdej iteracji moduł wyliczający bieżącej nazwy pliku.

    Uwaga

    Te kroki są wraz z opisanymi w procedurze do użytku z plikiem jeden obraz.

Przykład 1, kod

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: Tworzenie i zapisywanie obrazów miniatur

Poniższy przykład otwiera plik obrazu, określonej przez zmienną, tworzy miniaturę obrazu przy zachowaniu stały współczynnik proporcji i zapisuje miniatury o nazwie zmodyfikowanego pliku.Kod, który oblicza przy zachowaniu stała proporcje wysokości i szerokości miniatury są hermetyzowane w prywatnej procedura.

Aby skonfigurować ten przykład zadania skryptu do użytku z jednego obrazu

  1. Tworzenie zmiennej ciąg o nazwie CurrentImageFile i ustawić jej wartość na ścieżka i nazwę istniejącego pliku obrazu.

  2. Również utworzyć MaxThumbSize zmienna liczba całkowita i przypisz wartość w pikselach, takie jak 100.

  3. Na Skrypt stronaEdytor zadań skryptu, dodawanie zmiennych zarówno do ReadOnlyVariables Właściwość.

  4. W projekcie skryptu zestaw odwołanie do System.Drawing obszar nazw.

  5. W kodzie należy użyć Imports instrukcje, aby zaimportować System.Drawing i System.IO obszary nazw.

Aby skonfigurować ten przykład zadania skryptu do użytku z wielu plików obrazów

  1. Umieść zadanie skryptów znajdujące się w kontenerze Foreach pętli.

  2. Na Kolekcja stronaEdytor foreach pętli, zaznacz Moduł wyliczający plik foreach as the Moduł wyliczającyi określ ścieżka i maską pliki źródłowe, takie jak "*.jpg. „

  3. Na Zmienna mapowania strona, mapowanie CurrentImageFile Zmienna indeksu 0. Ta zmienna przekazuje zadanie skryptu w każdej iteracji moduł wyliczający bieżącej nazwy pliku.

    Uwaga

    Te kroki są wraz z opisanymi w procedurze do użytku z plikiem jeden obraz.

Przykład 2, kod

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);

            }

        }
Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.