The problem is that you don't assign the Image.FromFile(...) to anything. You create a new Image, you call Image.FromFile(..) without assigning the result to an Image variable. Then you call Graphics.FromImage(img) and start painting that img on itself. So what you currently are doing is drawing img to img. This cannot be done and probably throws the generic GDI+ error.
You can just do:
Image img= Image.FromFile(...);
string p =z + "\\"+ itemname ;
Directory.CreateDirectory(p);
image.Save(p, ...);
And that is it. No graphics are needed.