65 votes

Quel est le moyen le plus rapide d'enregistrer sur le disque un graphique figurant dans le presse-papiers ?

J'ai un graphique dans le presse-papiers sous OS X.

Quel est le moyen le plus rapide de le transférer sur le disque en png ou en jpg ?

2voto

Highmastdon Points 129

Utilisation de Aperçu.app est un moyen, mais un peu encombrant. On peut aussi le faire en ligne de commande.

Parce que pbpaste peut seulement pbpaste > filename les extraits de texte, vous voulez utiliser pngpaste à la place.

Installez-le avec Brew :

brew install pngpaste

et l'utiliser :

pngpaste <filename>

1voto

benwiggy Points 21125

Je sais que la question originale demande d'enregistrer en PNG ou JPEG, mais...

J'utilise un script qui enregistre n'importe quel graphique dans le presse-papiers sur une nouvelle page d'un document PDF, reproduisant ainsi en quelque sorte l'ancienne application 'Scrapbook' sur MacOS classique.

Le moyen le plus rapide est de sauvegarder le script dans le dossier de l'utilisateur. /Library/Scripts afin que je puisse l'exécuter à partir du menulet scripts de la barre de menu. (que vous pouvez activer dans l'AppleScript Script Editor.app de la boîte de dialogue Préférences).

Les images peuvent être copiées et collées à d'autres fins ou exportées en tant qu'images.

#!/usr/bin/python   
# getPDFclip v.1.3 : Get PDF from Clipboard image data.
# This script saves a PDF with a copy of any image data found on the Mac Clipboard.   
# If Clipboard.pdf exists, the image is added as an extra page.

from AppKit import NSPasteboard, NSPasteboardTypePDF, NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSTIFFPboardType, NSPICTPboardType, NSImage
from Foundation import NSURL
import Quartz as Quartz
import os, syslog

# Change this to whatever filepath you want:
outfile=os.path.expanduser("~/Desktop/Clipboard.pdf")

myFavoriteTypes = [NSPasteboardTypePDF, NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSTIFFPboardType, NSPICTPboardType, 'com.adobe.encapsulated-postscript']
pb = NSPasteboard.generalPasteboard()
best_type = pb.availableTypeFromArray_(myFavoriteTypes)
if best_type:
    clipData = pb.dataForType_(best_type)
    if clipData:
        image = NSImage.alloc().initWithPasteboard_(pb)
        if image:
            page = Quartz.PDFPage.alloc().initWithImage_(image)
        if os.path.exists(outfile):
            pdfURL = NSURL.fileURLWithPath_(outfile)
            myFile = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
            if myFile:
                pagenum = myFile.pageCount()
                myFile.insertPage_atIndex_(page, pagenum)
                print ("Image added to Clipboard file.")

        else:
            pageData = page.dataRepresentation()
            myFile = Quartz.PDFDocument.alloc().initWithData_(pageData)
        myFile.writeToFile_(outfile)
        print ("Clipboard file created.")

else:
    print ("No clipboard image data was retrieved.")
    print ("These types were available:")
    print (pb.types())

1voto

Wolfgang Fahl Points 312

N'ayant pas réussi à faire fonctionner l'approche zsh de @HappyFace, j'ai créé une version bash traditionnelle :

#!/bin/bash
# see https://apple.stackexchange.com/a/428168

#
# you might want to save this script to
# $HOME/bin/jpgpaste and do a
# ln -s jpgpaste cpngpaste and
# chmod +x jpgpaste cpngpaste

# paste the clibpoard to a png file
function pngpaste() {
    local name="$1.png"
    local folder=$(pwd)

    osascript -e "tell application \"System Events\" to ¬
                  write (the clipboard as «class PNGf») to ¬
                          (make new file at folder \"$folder\" with properties ¬
                                  {name:\"${name}\"})"
}

# paste the clipboard to a jpg file
function jpgpaste() {
    local name="$1.jpg"
    local folder=$(pwd)

    osascript -e "tell application \"System Events\" to ¬
                  write (the clipboard as JPEG picture) to ¬
                          (make new file at folder \"$folder\" with properties ¬
                                  {name:\"${name}\"})"
}

script=$(basename $0)
case $script in
  jpgpaste)
    jpgpaste "$1"
    ;;
  cpngpaste)
    pngpaste "$1"
    ;;
esac

1voto

Arther Taylor Points 11

~Si vous utilisez déjà Alfred ou un gestionnaire de presse-papiers ~

J'utilise le gestionnaire d'historique de presse-papiers Alfreds (vous pouvez utiliser n'importe quel gestionnaire de presse-papiers gratuit pour faire cela aussi, à condition qu'il garde aussi un historique des images et pas seulement du texte).

Alfred enregistre toutes les captures d'écran de mes images dans le presse-papiers et les sauvegarde dans son historique de snippets.

My Clipboard History in Alfred (it gets purged every 24H)

Je crée ensuite une action de dossier (en utilisant Automator) pour copier tout ce qui est sauvegardé dans le dossier Historique du presse-papiers d'Alfred*.

*(situé dans Library/applicationsupport/alfred/databses/alipboard.alfdp.data

This is where Alfred saves Clipboard Image History (or find your clipboard managers image history folder)

pour dupliquer ces images dans mon dossier de captures d'écran/téléchargements/bureau. (alfred supprime l'historique de mon presse-papiers toutes les 24H)

Use Automator - Folder Actions - Select the clipboard image history folder location and copy the finder contents to your screenshots folder / desktop / downloads etc

Maintenant, j'ai toujours une copie sauvegardée de la capture d'écran sur mon disque, ainsi que la capture d'écran dans mon presse-papiers.]

0 votes

J'aimerais tellement pouvoir faire glisser les images hors du gestionnaire d'historique du presse-papiers d'Alfred. Pourriez-vous nous montrer à quoi ressemble cette action sur le dossier ?

0voto

HappyFace Points 433
setopt rematchpcre

function pngpaste() {
    local name="${1}"

    [[ "$name" =~ '\.png$' ]] || name+=.png

    osascript -e "tell application \"System Events\" to ¬
                  write (the clipboard as «class PNGf») to ¬
                          (make new file at folder \"$(pwd)\" with properties ¬
                                  {name:\"${name}\"})"
}

function jpgpaste() {
    local name="${1}"

    [[ "$name" =~ '\.jpg$' ]] || name+=.jpg

    osascript -e "tell application \"System Events\" to ¬
                  write (the clipboard as JPEG picture) to ¬
                          (make new file at folder \"$(pwd)\" with properties ¬
                                  {name:\"${name}\"})"
}

Utilisation :

pngpaste a1.png
#or
jpgpaste a1.jpg

0 votes

Que faire de ce code ? S'agit-il d'un applescript ? comment est-il exécuté ?

0 votes

@WolfgangFahl C'est zsh, et cela peut aussi fonctionner avec bash. Vous pouvez coller les définitions de fonctions directement dans l'application de terminal par défaut, puis les utiliser comme indiqué. Si vous êtes toujours confus, lisez un guide de démarrage rapide sur zsh.

0 votes

-Merci pour cette réponse rapide. J'utilise bash et ksh depuis des années, mais zsh est un mot grec pour moi. Vous pourriez ajouter un sheebang zsh pour clarifier ce que vous faites. Il faut que cela aille dans le profil ou que ce soit deux scripts ou des liens pour le même fichier ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X