diff --git a/defpackage.lisp b/defpackage.lisp
index cd82ebf..4a47c76 100644
--- a/defpackage.lisp
+++ b/defpackage.lisp
@@ -40,7 +40,8 @@
    #:set-color-stroke #:set-color-fill 
    #:set-transparency #:set-fill-transparency #:set-stroke-transparency
    #:set-cymk-fill #:paint-image #:draw-image #:get-named-reference #:register-page-reference
-   #:add-link #:add-URI-link #:add-external-link #:read-jpeg-file #:make-jpeg-image
+   #:add-link #:add-URI-link #:add-external-link
+   #:read-jpeg-file #:make-jpeg-image #:read-png-file #:make-png-image
    #:make-image #:width #:height
    #:enter-outline-level #:close-outline-level #:with-outline-level
    #:draw-centered-text #:draw-left-text #:draw-right-text
diff --git a/png.lisp b/png.lisp
index 57604fb..eb312cb 100644
--- a/png.lisp
+++ b/png.lisp
@@ -136,6 +136,17 @@
 		     :width width :height height  :data data
                      :bits-per-color bits-per-color  :palette palette  :mask mask)))))
 
+(defgeneric make-png-image (png))
+
+(defmethod make-png-image (png)
+  (make-image png))
+
+(defmethod make-png-image ((pathname pathname))
+  (make-png-image (read-png-file pathname)))
+
+(defmethod make-png-image ((string string))
+  (make-png-image (read-png-file string)))
+
 (defmethod make-image ((png png-image) &key &allow-other-keys)
   ;; For color key masking, the Mask entry is an array of 2*N integers,
   ;; [min1 max1 ... minN maxN], where N is the number of color components in the
