web-dev-qa-db-ja.com

Word文書に埋め込まれた画像のファイルサイズを決定する

父は助けが必要な問題で私に電話をかけました。彼は受け取ったWord文書を編集しましたが、非常に大きいため、郵送できないことがわかりました。ページ数は少ないですが、画像はありました。画像の1つは大きなファイルでなければならないことがすぐにわかりました。問題のある画像が見つかるまで、画像を1つずつ削除してもらいました。

しかし、これを行うにはもっと簡単な方法が必要ですよね?

4
Keltari

写真の場合:

ファイル->「ファイルサイズを小さくする」から、すべてまたは選択した画像のみを圧縮するなど、さまざまなオプションを選択できます。また、画像に便乗している可能性のあるトリミングされた領域のデータをファイルから削除することもできます。

これは問題のある画像を特定するのに役立ちませんが、すべての画像を圧縮して、問題の可能性のある画像を排除するための簡単な方法です。

1
Cyndi

Wordファイルを保存します.docx なので .ZipそしてZipフォルダを開きますWord\media\

ファイルサイズが表示されます。

10
user300363

7-Zip などの圧縮ユーティリティを使用してWord(.docx)ドキュメントを開きます。フォルダ\ Word\media \を開くと、すべての埋め込みメディアファイルのリストがサイズとともに表示されます。

2
TommyZG

このマクロは、各画像のPPIを示し、サイズを縮小または拡大することを提案します。Microsoftコミュニティで見つけました。前述のように、マクロはRichard Michaelsによって作成されました。参考までに、各画像にコメントを付けるので、コメントが多いと混乱する可能性があります。

Sub PixelsMatter()
    'Created by Richard V. Michaels
    'http://www.greatcirclelearning.com
    'Creating custom and off-the-shelf productivity apps for Office

    On Error GoTo ErrHandler

    Dim doc As Word.Document, rng As Word.Range, iRng As Word.Range
    Dim shp As Word.Shape, iShp As Word.InlineShape
    Dim PixelCount As Integer, FullWidth As Integer, PPI As Integer
    Dim Mac As Boolean

    Set doc = Word.ActiveDocument
    Set rng = Word.Selection.Range
    'Check only the range selected, else check entire body of the document
    If rng.Start = rng.End Then Set rng = doc.Content

    #If Win32 Or Win64 Then
        'this is a PC
        PixelCount = 96
    #Else
        'this is a Mac
        PixelCount = 72
        Mac = True
    #End If

    For Each iShp In rng.InlineShapes
        'only looking for embedded or linked pictures
        If iShp.Type = wdInlineShapeLinkedPicture Or iShp.Type = wdInlineShapePicture Then
            'determining original width before scaling
            FullWidth = iShp.Width / (iShp.ScaleWidth / 100)
            'calculate PPI density based on the current scaled size of inserted image
            PPI = FullWidth / (iShp.Width / PixelCount)
            Select Case PPI
                Case Is < 150
                    iShp.Range.Comments.Add iShp.Range, "PPI is " & PPI & " and will result in poor print quality. " & _
                            "We suggest either reducing the size of the picture in the document or replacing with a higher quality source image."
                Case Is < 200
                    iShp.Range.Comments.Add iShp.Range, "PPI is " & PPI & ", which is marginal for a good print quality. " & _
                            "We suggest you print a sample and check if the print quality is satisfactory for your needs. " & _
                            "Higher print quality can be achieved by either reducing picture size or replacing with a higher quality source image."
                Case Is < 240
                    'PPI density is optimal, no comment made
                Case Else
                    iShp.Range.Comments.Add iShp.Range, "PPI is " & PPI & " and does not contribute to better print quality... " & _
                            "it is only creating a larger than necessary file size for this document. We suggest replacing the image with a more appropriately sized source image."
            End Select
        End If
    Next

    If Mac Then GoTo ErrHandler
    'With a Mac running Office 2011 there is no need to go further
    'The excessively buggy Office 2011 VBA errantly places all "floating" shapes into the inline shapes collection
    'No other PC version of Office VBA does this and if the following code is executed on a Mac, double comments
    'would be placed on all floating shapes that met the PPI criteria specified in the following Select Case command.

    If doc.Shapes.count = 0 Then GoTo ErrHandler
    Dim wrapType As Integer, i As Integer

    For i = doc.Shapes.count To 1 Step -1
        Set shp = doc.Shapes(i)
        If shp.Type = Office.MsoShapeType.msoPicture Or _
            shp.Type = Office.MsoShapeType.msoLinkedPicture Then
            If shp.WrapFormat.Type <> Word.WdWrapType.wdWrapNone Then
                wrapType = shp.WrapFormat.Type
                Set iShp = shp.ConvertToInlineShape
                If iShp.Range.InRange(rng) Then
                    'determining original width before scaling
                    FullWidth = iShp.Width / (iShp.ScaleWidth / 100)
                    'calculate PPI density based on the current scaled size of inserted image
                    PPI = FullWidth / (iShp.Width / PixelCount)
                    Select Case PPI
                        Case Is < 150
                            iShp.Range.Comments.Add iShp.Range, "PPI is " & PPI & " and will result in poor print quality. " & _
                                    "We suggest either reducing the size of the picture in the document or replacing with a higher quality source image."
                        Case Is < 200
                            iShp.Range.Comments.Add iShp.Range, "PPI is " & PPI & ", which is marginal for a good print quality. " & _
                                    "We suggest you print a sample and check if the print quality is satisfactory for your needs. " & _
                                    "Higher print quality can be achieved by either reducing picture size or replacing with a higher quality source image."
                        Case Is < 240
                            'PPI density is optimal, no comment made
                        Case Else
                            iShp.Range.Comments.Add iShp.Range, "PPI is " & PPI & " and does not contribute to better print quality... " & _
                                    "it is only creating a larger than necessary file size for this document. We suggest replacing the image with a more appropriately sized source image."
                    End Select
                   iShp.ConvertToShape
                   shp.WrapFormat.Type = wrapType
                Else
                    iShp.ConvertToShape
                    shp.WrapFormat.Type = wrapType
                End If
            End If
        End If
    Next

ErrHandler:
    Select Case Err
        Case 0
            MsgBox "Action Complete", vbInformation, "Pixels Matter"
        Case Else
            MsgBox Err.Number & vbCr & Err.Description, vbExclamation, "Pixels Matter"
            Err.Clear
    End Select

End Sub
1
Bryan

おそらく最も簡単な方法は、各画像を圧縮することです。 フォーマットメニューをクリックし、画像の圧縮を選択します。これにより、トリミングされたが画像データに保持されているパーツを含む、不要な画像データが削除されます。

0
Adam